Generated by Cython 3.0.0b3

Yellow lines hint at Python interaction.
Click on a line that starts with a "+" to see the C code that Cython generated for it.

Raw output: clm.c

+0001: # cython: c_string_type=unicode
  __pyx_t_37 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 1, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_test, __pyx_t_37) < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
 0002: # cython: c_string_encoding=utf8
 0003: 
+0004: import ctypes
  __pyx_t_43 = __Pyx_ImportDottedModule(__pyx_n_s_ctypes, NULL); if (unlikely(!__pyx_t_43)) __PYX_ERR(0, 4, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_43);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_ctypes, __pyx_t_43) < 0) __PYX_ERR(0, 4, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_43); __pyx_t_43 = 0;
+0005: from functools import singledispatch, partial
  __pyx_t_43 = PyList_New(2); if (unlikely(!__pyx_t_43)) __PYX_ERR(0, 5, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_43);
  __Pyx_INCREF(__pyx_n_s_singledispatch);
  __Pyx_GIVEREF(__pyx_n_s_singledispatch);
  PyList_SET_ITEM(__pyx_t_43, 0, __pyx_n_s_singledispatch);
  __Pyx_INCREF(__pyx_n_s_partial);
  __Pyx_GIVEREF(__pyx_n_s_partial);
  PyList_SET_ITEM(__pyx_t_43, 1, __pyx_n_s_partial);
  __pyx_t_41 = __Pyx_Import(__pyx_n_s_functools, __pyx_t_43, 0); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 5, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  __Pyx_DECREF(__pyx_t_43); __pyx_t_43 = 0;
  __pyx_t_43 = __Pyx_ImportFrom(__pyx_t_41, __pyx_n_s_singledispatch); if (unlikely(!__pyx_t_43)) __PYX_ERR(0, 5, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_43);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_singledispatch, __pyx_t_43) < 0) __PYX_ERR(0, 5, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_43); __pyx_t_43 = 0;
  __pyx_t_43 = __Pyx_ImportFrom(__pyx_t_41, __pyx_n_s_partial); if (unlikely(!__pyx_t_43)) __PYX_ERR(0, 5, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_43);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_partial, __pyx_t_43) < 0) __PYX_ERR(0, 5, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_43); __pyx_t_43 = 0;
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
+0006: import math
  __pyx_t_41 = __Pyx_ImportDottedModule(__pyx_n_s_math, NULL); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 6, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_math, __pyx_t_41) < 0) __PYX_ERR(0, 6, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
+0007: import random
  __pyx_t_41 = __Pyx_ImportDottedModule(__pyx_n_s_random, NULL); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 7, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_random, __pyx_t_41) < 0) __PYX_ERR(0, 7, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
+0008: import subprocess
  __pyx_t_41 = __Pyx_ImportDottedModule(__pyx_n_s_subprocess, NULL); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 8, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_subprocess, __pyx_t_41) < 0) __PYX_ERR(0, 8, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
+0009: import tempfile
  __pyx_t_41 = __Pyx_ImportDottedModule(__pyx_n_s_tempfile, NULL); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 9, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_tempfile, __pyx_t_41) < 0) __PYX_ERR(0, 9, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
+0010: import time
  __pyx_t_41 = __Pyx_ImportDottedModule(__pyx_n_s_time, NULL); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 10, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_time, __pyx_t_41) < 0) __PYX_ERR(0, 10, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
+0011: import types
  __pyx_t_41 = __Pyx_ImportDottedModule(__pyx_n_s_types, NULL); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 11, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_types, __pyx_t_41) < 0) __PYX_ERR(0, 11, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
 0012: import cython
 0013: from cython.cimports.cpython.mem import PyMem_Malloc, PyMem_Realloc, PyMem_Free
 0014: from cython cimport view
+0015: import numpy as np
  __pyx_t_41 = __Pyx_ImportDottedModule(__pyx_n_s_numpy, NULL); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 15, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_np, __pyx_t_41) < 0) __PYX_ERR(0, 15, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
 0016: cimport numpy as np
+0017: import numpy.typing as npt
  __pyx_t_41 = __Pyx_ImportDottedModule(__pyx_n_s_numpy_typing, __pyx_tuple__91); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 17, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_npt, __pyx_t_41) < 0) __PYX_ERR(0, 17, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
/* … */
  __pyx_tuple__91 = PyTuple_Pack(2, __pyx_n_s_numpy, __pyx_n_s_typing); if (unlikely(!__pyx_tuple__91)) __PYX_ERR(0, 17, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__91);
  __Pyx_GIVEREF(__pyx_tuple__91);
 0018: cimport pysndlib.cclm as cclm
 0019: cimport pysndlib.csndlib as csndlib
+0020: from pysndlib.sndlib import Sample, Header
  __pyx_t_41 = PyList_New(2); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 20, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  __Pyx_INCREF(__pyx_n_s_Sample);
  __Pyx_GIVEREF(__pyx_n_s_Sample);
  PyList_SET_ITEM(__pyx_t_41, 0, __pyx_n_s_Sample);
  __Pyx_INCREF(__pyx_n_s_Header);
  __Pyx_GIVEREF(__pyx_n_s_Header);
  PyList_SET_ITEM(__pyx_t_41, 1, __pyx_n_s_Header);
  __pyx_t_43 = __Pyx_Import(__pyx_n_s_pysndlib_sndlib, __pyx_t_41, 0); if (unlikely(!__pyx_t_43)) __PYX_ERR(0, 20, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_43);
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
  __pyx_t_41 = __Pyx_ImportFrom(__pyx_t_43, __pyx_n_s_Sample); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 20, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_Sample, __pyx_t_41) < 0) __PYX_ERR(0, 20, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
  __pyx_t_41 = __Pyx_ImportFrom(__pyx_t_43, __pyx_n_s_Header); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 20, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_Header, __pyx_t_41) < 0) __PYX_ERR(0, 20, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
  __Pyx_DECREF(__pyx_t_43); __pyx_t_43 = 0;
 0021: 
 0022: 
 0023: 
 0024: 
+0025: np.import_array()
  __pyx_t_44 = __pyx_f_5numpy_import_array(); if (unlikely(__pyx_t_44 == ((int)-1))) __PYX_ERR(0, 25, __pyx_L1_error)
 0026: 
 0027: 
 0028: 
 0029: # --------------- clm enums ---------------- #
+0030: cpdef enum Interp:
enum __pyx_t_8pysndlib_3clm_Interp {
  __pyx_e_8pysndlib_3clm_NONE,
  __pyx_e_8pysndlib_3clm_LINEAR,
  __pyx_e_8pysndlib_3clm_SINUSOIDAL,
  __pyx_e_8pysndlib_3clm_ALL_PASS,
  __pyx_e_8pysndlib_3clm_LAGRANGE,
  __pyx_e_8pysndlib_3clm_BEZIER,
  __pyx_e_8pysndlib_3clm_HERMITE
};
 0031:     """
 0032:     various interpolation types
 0033:     """
 0034:     NONE, LINEAR,SINUSOIDAL, ALL_PASS, LAGRANGE, BEZIER, HERMITE
 0035: 
+0036: cpdef enum Window:
enum __pyx_t_8pysndlib_3clm_Window {
  __pyx_e_8pysndlib_3clm_RECTANGULAR,
  __pyx_e_8pysndlib_3clm_HANN,
  __pyx_e_8pysndlib_3clm_WELCH,
  __pyx_e_8pysndlib_3clm_PARZEN,
  __pyx_e_8pysndlib_3clm_BARTLETT,
  __pyx_e_8pysndlib_3clm_HAMMING,
  __pyx_e_8pysndlib_3clm_BLACKMAN2,
  __pyx_e_8pysndlib_3clm_BLACKMAN3,
  __pyx_e_8pysndlib_3clm_BLACKMAN4,
  __pyx_e_8pysndlib_3clm_EXPONENTIAL,
  __pyx_e_8pysndlib_3clm_RIEMANN,
  __pyx_e_8pysndlib_3clm_KAISER,
  __pyx_e_8pysndlib_3clm_CAUCHY,
  __pyx_e_8pysndlib_3clm_POISSON,
  __pyx_e_8pysndlib_3clm_GAUSSIAN,
  __pyx_e_8pysndlib_3clm_TUKEY,
  __pyx_e_8pysndlib_3clm_DOLPH_CHEBYSHEV,
  __pyx_e_8pysndlib_3clm_HANN_POISSON,
  __pyx_e_8pysndlib_3clm_CONNES,
  __pyx_e_8pysndlib_3clm_SAMARAKI,
  __pyx_e_8pysndlib_3clm_ULTRASPHERICAL,
  __pyx_e_8pysndlib_3clm_BARTLETT_HANN,
  __pyx_e_8pysndlib_3clm_BOHMAN,
  __pyx_e_8pysndlib_3clm_FLAT_TOP,
  __pyx_e_8pysndlib_3clm_BLACKMAN5,
  __pyx_e_8pysndlib_3clm_BLACKMAN6,
  __pyx_e_8pysndlib_3clm_BLACKMAN7,
  __pyx_e_8pysndlib_3clm_BLACKMAN8,
  __pyx_e_8pysndlib_3clm_BLACKMAN9,
  __pyx_e_8pysndlib_3clm_BLACKMAN10,
  __pyx_e_8pysndlib_3clm_RV2,
  __pyx_e_8pysndlib_3clm_RV3,
  __pyx_e_8pysndlib_3clm_RV4,
  __pyx_e_8pysndlib_3clm_MLT_SINE,
  __pyx_e_8pysndlib_3clm_PAPOULIS,
  __pyx_e_8pysndlib_3clm_DPSS,
  __pyx_e_8pysndlib_3clm_SINC
};
 0037:     """
 0038:     many useful windows
 0039:     """
 0040:     RECTANGULAR, HANN, WELCH, PARZEN, BARTLETT, HAMMING, BLACKMAN2, BLACKMAN3, BLACKMAN4, EXPONENTIAL, RIEMANN, KAISER, CAUCHY, POISSON, GAUSSIAN, TUKEY, DOLPH_CHEBYSHEV, HANN_POISSON, CONNES, SAMARAKI, ULTRASPHERICAL, BARTLETT_HANN, BOHMAN, FLAT_TOP, BLACKMAN5, BLACKMAN6, BLACKMAN7, BLACKMAN8, BLACKMAN9, BLACKMAN10, RV2, RV3, RV4, MLT_SINE, PAPOULIS, DPSS, SINC,
 0041: 
+0042: cpdef enum Spectrum:
enum __pyx_t_8pysndlib_3clm_Spectrum {
  __pyx_e_8pysndlib_3clm_IN_DB,
  __pyx_e_8pysndlib_3clm_NORMALIZED,
  __pyx_e_8pysndlib_3clm_RAW
};
 0043:     """
 0044:     types of normalizations when using the spectrum function. The results are in dB if IN_DB, or linear and normalized to 1.0 NORMALIZED, or linear unnormalized RAW
 0045:     """
 0046:     IN_DB, NORMALIZED, RAW
 0047: 
+0048: cpdef enum Polynomial:
enum __pyx_t_8pysndlib_3clm_Polynomial {
  __pyx_e_8pysndlib_3clm_EITHER_KIND,
  __pyx_e_8pysndlib_3clm_FIRST_KIND,
  __pyx_e_8pysndlib_3clm_SECOND_KIND,
  __pyx_e_8pysndlib_3clm_BOTH_KINDS
};
 0049:     """
 0050:     used for polynomial based gens 
 0051:     """
 0052:     EITHER_KIND, FIRST_KIND, SECOND_KIND, BOTH_KINDS
 0053: 
 0054: 
 0055: 
 0056: # --------------- function types for ctypes ---------------- #
+0057: INPUTCALLBACK = ctypes.CFUNCTYPE(ctypes.c_double, ctypes.c_void_p, ctypes.c_int)
  __Pyx_GetModuleGlobalName(__pyx_t_43, __pyx_n_s_ctypes); if (unlikely(!__pyx_t_43)) __PYX_ERR(0, 57, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_43);
  __pyx_t_41 = __Pyx_PyObject_GetAttrStr(__pyx_t_43, __pyx_n_s_CFUNCTYPE); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 57, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  __Pyx_DECREF(__pyx_t_43); __pyx_t_43 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_43, __pyx_n_s_ctypes); if (unlikely(!__pyx_t_43)) __PYX_ERR(0, 57, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_43);
  __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_43, __pyx_n_s_c_double); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 57, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_10);
  __Pyx_DECREF(__pyx_t_43); __pyx_t_43 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_43, __pyx_n_s_ctypes); if (unlikely(!__pyx_t_43)) __PYX_ERR(0, 57, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_43);
  __pyx_t_42 = __Pyx_PyObject_GetAttrStr(__pyx_t_43, __pyx_n_s_c_void_p); if (unlikely(!__pyx_t_42)) __PYX_ERR(0, 57, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_42);
  __Pyx_DECREF(__pyx_t_43); __pyx_t_43 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_43, __pyx_n_s_ctypes); if (unlikely(!__pyx_t_43)) __PYX_ERR(0, 57, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_43);
  __pyx_t_40 = __Pyx_PyObject_GetAttrStr(__pyx_t_43, __pyx_n_s_c_int); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 57, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  __Pyx_DECREF(__pyx_t_43); __pyx_t_43 = 0;
  __pyx_t_43 = PyTuple_New(3); if (unlikely(!__pyx_t_43)) __PYX_ERR(0, 57, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_43);
  __Pyx_GIVEREF(__pyx_t_10);
  PyTuple_SET_ITEM(__pyx_t_43, 0, __pyx_t_10);
  __Pyx_GIVEREF(__pyx_t_42);
  PyTuple_SET_ITEM(__pyx_t_43, 1, __pyx_t_42);
  __Pyx_GIVEREF(__pyx_t_40);
  PyTuple_SET_ITEM(__pyx_t_43, 2, __pyx_t_40);
  __pyx_t_10 = 0;
  __pyx_t_42 = 0;
  __pyx_t_40 = 0;
  __pyx_t_40 = __Pyx_PyObject_Call(__pyx_t_41, __pyx_t_43, NULL); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 57, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
  __Pyx_DECREF(__pyx_t_43); __pyx_t_43 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_INPUTCALLBACK, __pyx_t_40) < 0) __PYX_ERR(0, 57, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
+0058: EDITCALLBACK = ctypes.CFUNCTYPE(ctypes.c_int, ctypes.c_void_p)
  __Pyx_GetModuleGlobalName(__pyx_t_40, __pyx_n_s_ctypes); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 58, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  __pyx_t_43 = __Pyx_PyObject_GetAttrStr(__pyx_t_40, __pyx_n_s_CFUNCTYPE); if (unlikely(!__pyx_t_43)) __PYX_ERR(0, 58, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_43);
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_40, __pyx_n_s_ctypes); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 58, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  __pyx_t_41 = __Pyx_PyObject_GetAttrStr(__pyx_t_40, __pyx_n_s_c_int); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 58, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_40, __pyx_n_s_ctypes); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 58, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  __pyx_t_42 = __Pyx_PyObject_GetAttrStr(__pyx_t_40, __pyx_n_s_c_void_p); if (unlikely(!__pyx_t_42)) __PYX_ERR(0, 58, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_42);
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
  __pyx_t_40 = PyTuple_New(2); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 58, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  __Pyx_GIVEREF(__pyx_t_41);
  PyTuple_SET_ITEM(__pyx_t_40, 0, __pyx_t_41);
  __Pyx_GIVEREF(__pyx_t_42);
  PyTuple_SET_ITEM(__pyx_t_40, 1, __pyx_t_42);
  __pyx_t_41 = 0;
  __pyx_t_42 = 0;
  __pyx_t_42 = __Pyx_PyObject_Call(__pyx_t_43, __pyx_t_40, NULL); if (unlikely(!__pyx_t_42)) __PYX_ERR(0, 58, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_42);
  __Pyx_DECREF(__pyx_t_43); __pyx_t_43 = 0;
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_EDITCALLBACK, __pyx_t_42) < 0) __PYX_ERR(0, 58, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_42); __pyx_t_42 = 0;
+0059: ANALYZECALLBACK = ctypes.CFUNCTYPE(ctypes.c_bool, ctypes.c_void_p, ctypes.CFUNCTYPE(ctypes.c_double, ctypes.c_void_p, ctypes.c_int))
  __Pyx_GetModuleGlobalName(__pyx_t_42, __pyx_n_s_ctypes); if (unlikely(!__pyx_t_42)) __PYX_ERR(0, 59, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_42);
  __pyx_t_40 = __Pyx_PyObject_GetAttrStr(__pyx_t_42, __pyx_n_s_CFUNCTYPE); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 59, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  __Pyx_DECREF(__pyx_t_42); __pyx_t_42 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_42, __pyx_n_s_ctypes); if (unlikely(!__pyx_t_42)) __PYX_ERR(0, 59, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_42);
  __pyx_t_43 = __Pyx_PyObject_GetAttrStr(__pyx_t_42, __pyx_n_s_c_bool); if (unlikely(!__pyx_t_43)) __PYX_ERR(0, 59, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_43);
  __Pyx_DECREF(__pyx_t_42); __pyx_t_42 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_42, __pyx_n_s_ctypes); if (unlikely(!__pyx_t_42)) __PYX_ERR(0, 59, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_42);
  __pyx_t_41 = __Pyx_PyObject_GetAttrStr(__pyx_t_42, __pyx_n_s_c_void_p); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 59, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  __Pyx_DECREF(__pyx_t_42); __pyx_t_42 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_42, __pyx_n_s_ctypes); if (unlikely(!__pyx_t_42)) __PYX_ERR(0, 59, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_42);
  __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_42, __pyx_n_s_CFUNCTYPE); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 59, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_10);
  __Pyx_DECREF(__pyx_t_42); __pyx_t_42 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_42, __pyx_n_s_ctypes); if (unlikely(!__pyx_t_42)) __PYX_ERR(0, 59, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_42);
  __pyx_t_39 = __Pyx_PyObject_GetAttrStr(__pyx_t_42, __pyx_n_s_c_double); if (unlikely(!__pyx_t_39)) __PYX_ERR(0, 59, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_39);
  __Pyx_DECREF(__pyx_t_42); __pyx_t_42 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_42, __pyx_n_s_ctypes); if (unlikely(!__pyx_t_42)) __PYX_ERR(0, 59, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_42);
  __pyx_t_38 = __Pyx_PyObject_GetAttrStr(__pyx_t_42, __pyx_n_s_c_void_p); if (unlikely(!__pyx_t_38)) __PYX_ERR(0, 59, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_38);
  __Pyx_DECREF(__pyx_t_42); __pyx_t_42 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_42, __pyx_n_s_ctypes); if (unlikely(!__pyx_t_42)) __PYX_ERR(0, 59, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_42);
  __pyx_t_37 = __Pyx_PyObject_GetAttrStr(__pyx_t_42, __pyx_n_s_c_int); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 59, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  __Pyx_DECREF(__pyx_t_42); __pyx_t_42 = 0;
  __pyx_t_42 = PyTuple_New(3); if (unlikely(!__pyx_t_42)) __PYX_ERR(0, 59, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_42);
  __Pyx_GIVEREF(__pyx_t_39);
  PyTuple_SET_ITEM(__pyx_t_42, 0, __pyx_t_39);
  __Pyx_GIVEREF(__pyx_t_38);
  PyTuple_SET_ITEM(__pyx_t_42, 1, __pyx_t_38);
  __Pyx_GIVEREF(__pyx_t_37);
  PyTuple_SET_ITEM(__pyx_t_42, 2, __pyx_t_37);
  __pyx_t_39 = 0;
  __pyx_t_38 = 0;
  __pyx_t_37 = 0;
  __pyx_t_37 = __Pyx_PyObject_Call(__pyx_t_10, __pyx_t_42, NULL); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 59, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
  __Pyx_DECREF(__pyx_t_42); __pyx_t_42 = 0;
  __pyx_t_42 = PyTuple_New(3); if (unlikely(!__pyx_t_42)) __PYX_ERR(0, 59, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_42);
  __Pyx_GIVEREF(__pyx_t_43);
  PyTuple_SET_ITEM(__pyx_t_42, 0, __pyx_t_43);
  __Pyx_GIVEREF(__pyx_t_41);
  PyTuple_SET_ITEM(__pyx_t_42, 1, __pyx_t_41);
  __Pyx_GIVEREF(__pyx_t_37);
  PyTuple_SET_ITEM(__pyx_t_42, 2, __pyx_t_37);
  __pyx_t_43 = 0;
  __pyx_t_41 = 0;
  __pyx_t_37 = 0;
  __pyx_t_37 = __Pyx_PyObject_Call(__pyx_t_40, __pyx_t_42, NULL); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 59, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
  __Pyx_DECREF(__pyx_t_42); __pyx_t_42 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_ANALYZECALLBACK, __pyx_t_37) < 0) __PYX_ERR(0, 59, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
+0060: SYNTHESIZECALLBACK = ctypes.CFUNCTYPE(ctypes.c_double, ctypes.c_void_p)
  __Pyx_GetModuleGlobalName(__pyx_t_37, __pyx_n_s_ctypes); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 60, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  __pyx_t_42 = __Pyx_PyObject_GetAttrStr(__pyx_t_37, __pyx_n_s_CFUNCTYPE); if (unlikely(!__pyx_t_42)) __PYX_ERR(0, 60, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_42);
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_37, __pyx_n_s_ctypes); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 60, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  __pyx_t_40 = __Pyx_PyObject_GetAttrStr(__pyx_t_37, __pyx_n_s_c_double); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 60, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_37, __pyx_n_s_ctypes); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 60, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  __pyx_t_41 = __Pyx_PyObject_GetAttrStr(__pyx_t_37, __pyx_n_s_c_void_p); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 60, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
  __pyx_t_37 = PyTuple_New(2); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 60, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  __Pyx_GIVEREF(__pyx_t_40);
  PyTuple_SET_ITEM(__pyx_t_37, 0, __pyx_t_40);
  __Pyx_GIVEREF(__pyx_t_41);
  PyTuple_SET_ITEM(__pyx_t_37, 1, __pyx_t_41);
  __pyx_t_40 = 0;
  __pyx_t_41 = 0;
  __pyx_t_41 = __Pyx_PyObject_Call(__pyx_t_42, __pyx_t_37, NULL); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 60, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  __Pyx_DECREF(__pyx_t_42); __pyx_t_42 = 0;
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_SYNTHESIZECALLBACK, __pyx_t_41) < 0) __PYX_ERR(0, 60, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
+0061: LOCSIGDETOURCALLBACK = ctypes.CFUNCTYPE(None, ctypes.c_void_p, ctypes.c_longlong)
  __Pyx_GetModuleGlobalName(__pyx_t_41, __pyx_n_s_ctypes); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 61, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  __pyx_t_37 = __Pyx_PyObject_GetAttrStr(__pyx_t_41, __pyx_n_s_CFUNCTYPE); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 61, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_41, __pyx_n_s_ctypes); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 61, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  __pyx_t_42 = __Pyx_PyObject_GetAttrStr(__pyx_t_41, __pyx_n_s_c_void_p); if (unlikely(!__pyx_t_42)) __PYX_ERR(0, 61, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_42);
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_41, __pyx_n_s_ctypes); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 61, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  __pyx_t_40 = __Pyx_PyObject_GetAttrStr(__pyx_t_41, __pyx_n_s_c_longlong); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 61, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
  __pyx_t_41 = PyTuple_New(3); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 61, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  PyTuple_SET_ITEM(__pyx_t_41, 0, Py_None);
  __Pyx_GIVEREF(__pyx_t_42);
  PyTuple_SET_ITEM(__pyx_t_41, 1, __pyx_t_42);
  __Pyx_GIVEREF(__pyx_t_40);
  PyTuple_SET_ITEM(__pyx_t_41, 2, __pyx_t_40);
  __pyx_t_42 = 0;
  __pyx_t_40 = 0;
  __pyx_t_40 = __Pyx_PyObject_Call(__pyx_t_37, __pyx_t_41, NULL); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 61, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_LOCSIGDETOURCALLBACK, __pyx_t_40) < 0) __PYX_ERR(0, 61, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
+0062: ENVFUNCTION = ctypes.CFUNCTYPE(ctypes.c_double, ctypes.c_double) # for env_any    
  __Pyx_GetModuleGlobalName(__pyx_t_40, __pyx_n_s_ctypes); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 62, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  __pyx_t_41 = __Pyx_PyObject_GetAttrStr(__pyx_t_40, __pyx_n_s_CFUNCTYPE); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 62, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_40, __pyx_n_s_ctypes); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 62, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  __pyx_t_37 = __Pyx_PyObject_GetAttrStr(__pyx_t_40, __pyx_n_s_c_double); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 62, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_40, __pyx_n_s_ctypes); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 62, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  __pyx_t_42 = __Pyx_PyObject_GetAttrStr(__pyx_t_40, __pyx_n_s_c_double); if (unlikely(!__pyx_t_42)) __PYX_ERR(0, 62, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_42);
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
  __pyx_t_40 = PyTuple_New(2); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 62, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  __Pyx_GIVEREF(__pyx_t_37);
  PyTuple_SET_ITEM(__pyx_t_40, 0, __pyx_t_37);
  __Pyx_GIVEREF(__pyx_t_42);
  PyTuple_SET_ITEM(__pyx_t_40, 1, __pyx_t_42);
  __pyx_t_37 = 0;
  __pyx_t_42 = 0;
  __pyx_t_42 = __Pyx_PyObject_Call(__pyx_t_41, __pyx_t_40, NULL); if (unlikely(!__pyx_t_42)) __PYX_ERR(0, 62, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_42);
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_ENVFUNCTION, __pyx_t_42) < 0) __PYX_ERR(0, 62, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_42); __pyx_t_42 = 0;
 0063: 
 0064: #these may need to be set based on system type etc
+0065: DEFAULT_OUTPUT_SRATE = 44100
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_DEFAULT_OUTPUT_SRATE, __pyx_int_44100) < 0) __PYX_ERR(0, 65, __pyx_L1_error)
+0066: DEFAULT_OUTPUT_CHANS = 1
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_DEFAULT_OUTPUT_CHANS, __pyx_int_1) < 0) __PYX_ERR(0, 66, __pyx_L1_error)
+0067: DEFAULT_OUTPUT_SAMPLE_TYPE = Sample.BFLOAT
  __Pyx_GetModuleGlobalName(__pyx_t_42, __pyx_n_s_Sample); if (unlikely(!__pyx_t_42)) __PYX_ERR(0, 67, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_42);
  __pyx_t_40 = __Pyx_PyObject_GetAttrStr(__pyx_t_42, __pyx_n_s_BFLOAT); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 67, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  __Pyx_DECREF(__pyx_t_42); __pyx_t_42 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_DEFAULT_OUTPUT_SAMPLE_TYPE, __pyx_t_40) < 0) __PYX_ERR(0, 67, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
+0068: DEFAULT_OUTPUT_HEADER_TYPE = Header.AIFC
  __Pyx_GetModuleGlobalName(__pyx_t_40, __pyx_n_s_Header); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 68, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  __pyx_t_42 = __Pyx_PyObject_GetAttrStr(__pyx_t_40, __pyx_n_s_AIFC); if (unlikely(!__pyx_t_42)) __PYX_ERR(0, 68, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_42);
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_DEFAULT_OUTPUT_HEADER_TYPE, __pyx_t_42) < 0) __PYX_ERR(0, 68, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_42); __pyx_t_42 = 0;
 0069: 
 0070: 
 0071: 
 0072: 
 0073: # --------------- main clm prefs ---------------- #
 0074: 
+0075: CLM  = types.SimpleNamespace(
  __Pyx_GetModuleGlobalName(__pyx_t_42, __pyx_n_s_types); if (unlikely(!__pyx_t_42)) __PYX_ERR(0, 75, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_42);
  __pyx_t_40 = __Pyx_PyObject_GetAttrStr(__pyx_t_42, __pyx_n_s_SimpleNamespace); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 75, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  __Pyx_DECREF(__pyx_t_42); __pyx_t_42 = 0;
/* … */
  __pyx_t_41 = __Pyx_PyObject_Call(__pyx_t_40, __pyx_empty_tuple, __pyx_t_42); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 75, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
  __Pyx_DECREF(__pyx_t_42); __pyx_t_42 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_CLM, __pyx_t_41) < 0) __PYX_ERR(0, 75, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
+0076:     file_name = 'test.aiff',
  __pyx_t_42 = __Pyx_PyDict_NewPresized(19); if (unlikely(!__pyx_t_42)) __PYX_ERR(0, 76, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_42);
  if (PyDict_SetItem(__pyx_t_42, __pyx_n_s_file_name, __pyx_kp_s_test_aiff) < 0) __PYX_ERR(0, 76, __pyx_L1_error)
+0077:     srate = DEFAULT_OUTPUT_SRATE,
  __Pyx_GetModuleGlobalName(__pyx_t_41, __pyx_n_s_DEFAULT_OUTPUT_SRATE); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 77, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  if (PyDict_SetItem(__pyx_t_42, __pyx_n_s_srate, __pyx_t_41) < 0) __PYX_ERR(0, 76, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
+0078:     channels = DEFAULT_OUTPUT_CHANS,
  __Pyx_GetModuleGlobalName(__pyx_t_41, __pyx_n_s_DEFAULT_OUTPUT_CHANS); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 78, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  if (PyDict_SetItem(__pyx_t_42, __pyx_n_s_channels, __pyx_t_41) < 0) __PYX_ERR(0, 76, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
+0079:     sample_type = DEFAULT_OUTPUT_SAMPLE_TYPE,
  __Pyx_GetModuleGlobalName(__pyx_t_41, __pyx_n_s_DEFAULT_OUTPUT_SAMPLE_TYPE); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 79, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  if (PyDict_SetItem(__pyx_t_42, __pyx_n_s_sample_type, __pyx_t_41) < 0) __PYX_ERR(0, 76, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
+0080:     header_type = DEFAULT_OUTPUT_HEADER_TYPE,
  __Pyx_GetModuleGlobalName(__pyx_t_41, __pyx_n_s_DEFAULT_OUTPUT_HEADER_TYPE); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 80, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  if (PyDict_SetItem(__pyx_t_42, __pyx_n_s_header_type, __pyx_t_41) < 0) __PYX_ERR(0, 76, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
+0081:     verbose = False,
  if (PyDict_SetItem(__pyx_t_42, __pyx_n_s_verbose, Py_False) < 0) __PYX_ERR(0, 76, __pyx_L1_error)
+0082:     play = False,
  if (PyDict_SetItem(__pyx_t_42, __pyx_n_s_play, Py_False) < 0) __PYX_ERR(0, 76, __pyx_L1_error)
+0083:     statistics = False,
  if (PyDict_SetItem(__pyx_t_42, __pyx_n_s_statistics, Py_False) < 0) __PYX_ERR(0, 76, __pyx_L1_error)
+0084:     reverb = False,
  if (PyDict_SetItem(__pyx_t_42, __pyx_n_s_reverb, Py_False) < 0) __PYX_ERR(0, 76, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_42, __pyx_n_s_reverb_channels, __pyx_int_1) < 0) __PYX_ERR(0, 76, __pyx_L1_error)
 0085:     reverb_channels = 1,
+0086:     reverb_data = None,
  if (PyDict_SetItem(__pyx_t_42, __pyx_n_s_reverb_data, Py_None) < 0) __PYX_ERR(0, 76, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_42, __pyx_n_s_reverb_file_name, __pyx_kp_s_test_rev) < 0) __PYX_ERR(0, 76, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_42, __pyx_n_s_table_size, __pyx_int_512) < 0) __PYX_ERR(0, 76, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_42, __pyx_n_s_buffer_size, __pyx_int_65536) < 0) __PYX_ERR(0, 76, __pyx_L1_error)
 0087:     reverb_file_name = 'test.rev',
 0088:     table_size = 512,
 0089:     buffer_size = 65536,
+0090:     locsig_type = Interp.LINEAR,
  __pyx_t_41 = __Pyx_Enum_Interp_to_py(__pyx_e_8pysndlib_3clm_LINEAR); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 90, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  if (PyDict_SetItem(__pyx_t_42, __pyx_n_s_locsig_type, __pyx_t_41) < 0) __PYX_ERR(0, 76, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
+0091:     clipped = True,
  if (PyDict_SetItem(__pyx_t_42, __pyx_n_s_clipped, Py_True) < 0) __PYX_ERR(0, 76, __pyx_L1_error)
+0092:     player = False,
  if (PyDict_SetItem(__pyx_t_42, __pyx_n_s_player, Py_False) < 0) __PYX_ERR(0, 76, __pyx_L1_error)
+0093:     output = False,
  if (PyDict_SetItem(__pyx_t_42, __pyx_n_s_output, Py_False) < 0) __PYX_ERR(0, 76, __pyx_L1_error)
+0094:     delete_reverb = False
  if (PyDict_SetItem(__pyx_t_42, __pyx_n_s_delete_reverb, Py_False) < 0) __PYX_ERR(0, 76, __pyx_L1_error)
 0095: )
 0096: 
 0097: 
+0098: CLM.player = 'afplay'
  __Pyx_GetModuleGlobalName(__pyx_t_41, __pyx_n_s_CLM); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 98, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  if (__Pyx_PyObject_SetAttrStr(__pyx_t_41, __pyx_n_s_player, __pyx_n_s_afplay) < 0) __PYX_ERR(0, 98, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
 0099: 
 0100: 
 0101: # --------------- initializations ---------------- #
 0102: 
+0103: cclm.mus_initialize()
  mus_initialize();
+0104: cclm.mus_set_rand_seed(int(time.time()))
  __Pyx_GetModuleGlobalName(__pyx_t_41, __pyx_n_s_time); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 104, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  __pyx_t_42 = __Pyx_PyObject_GetAttrStr(__pyx_t_41, __pyx_n_s_time); if (unlikely(!__pyx_t_42)) __PYX_ERR(0, 104, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_42);
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
  __pyx_t_41 = __Pyx_PyObject_CallNoArg(__pyx_t_42); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 104, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  __Pyx_DECREF(__pyx_t_42); __pyx_t_42 = 0;
  __pyx_t_42 = __Pyx_PyNumber_Int(__pyx_t_41); if (unlikely(!__pyx_t_42)) __PYX_ERR(0, 104, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_42);
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
  __pyx_t_45 = __Pyx_PyInt_As_uint64_t(__pyx_t_42); if (unlikely((__pyx_t_45 == ((uint64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 104, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_42); __pyx_t_42 = 0;
  mus_set_rand_seed(__pyx_t_45);
 0105: 
 0106: 
+0107: cdef void clm_error_handler(int error_type, char* msg):
static void __pyx_f_8pysndlib_3clm_clm_error_handler(int __pyx_v_error_type, char *__pyx_v_msg) {
  PyObject *__pyx_v_message = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("clm_error_handler", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("pysndlib.clm.clm_error_handler", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_XDECREF(__pyx_v_message);
  __Pyx_RefNannyFinishContext();
}
+0108:     message =  msg + ". "  +  csndlib.mus_error_type_to_string(error_type)
  __pyx_t_1 = __Pyx_PyUnicode_FromString(__pyx_v_msg); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 108, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyUnicode_ConcatInPlace(__pyx_t_1, __pyx_kp_s__13); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 108, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyUnicode_FromString(mus_error_type_to_string(__pyx_v_error_type)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 108, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_3 = __Pyx_PyUnicode_ConcatInPlace(__pyx_t_2, __pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 108, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_message = __pyx_t_3;
  __pyx_t_3 = 0;
+0109:     raise SNDLibError(message)
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_SNDLibError); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 109, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = NULL;
  __pyx_t_4 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_1);
    if (likely(__pyx_t_2)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
      __Pyx_INCREF(__pyx_t_2);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_1, function);
      __pyx_t_4 = 1;
    }
  }
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_v_message};
    __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4);
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 109, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  }
  __Pyx_Raise(__pyx_t_3, 0, 0, 0);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __PYX_ERR(0, 109, __pyx_L1_error)
 0110: 
+0111: class SNDLibError(Exception):
  __pyx_t_42 = PyTuple_New(1); if (unlikely(!__pyx_t_42)) __PYX_ERR(0, 111, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_42);
  __Pyx_INCREF((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0]));
  __Pyx_GIVEREF((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0]));
  PyTuple_SET_ITEM(__pyx_t_42, 0, ((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0])));
  __pyx_t_41 = __Pyx_PEP560_update_bases(__pyx_t_42); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 111, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  __pyx_t_40 = __Pyx_CalculateMetaclass(NULL, __pyx_t_41); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 111, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  __pyx_t_37 = __Pyx_Py3MetaclassPrepare(__pyx_t_40, __pyx_t_41, __pyx_n_s_SNDLibError, __pyx_n_s_SNDLibError, (PyObject *) NULL, __pyx_n_s_pysndlib_clm, __pyx_kp_s_this_is_general_class_to_raise); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 111, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  if (__pyx_t_41 != __pyx_t_42) {
    if (unlikely((PyDict_SetItemString(__pyx_t_37, "__orig_bases__", __pyx_t_42) < 0))) __PYX_ERR(0, 111, __pyx_L1_error)
  }
  __Pyx_DECREF(__pyx_t_42); __pyx_t_42 = 0;
  __pyx_t_42 = PyList_New(0); if (unlikely(!__pyx_t_42)) __PYX_ERR(0, 111, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_42);
/* … */
  __pyx_t_43 = __Pyx_Py3ClassCreate(__pyx_t_40, __pyx_n_s_SNDLibError, __pyx_t_41, __pyx_t_37, NULL, 0, 0); if (unlikely(!__pyx_t_43)) __PYX_ERR(0, 111, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_43);
  if (__Pyx_CyFunction_InitClassCell(__pyx_t_42, __pyx_t_43) < 0) __PYX_ERR(0, 111, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_42); __pyx_t_42 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_SNDLibError, __pyx_t_43) < 0) __PYX_ERR(0, 111, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_43); __pyx_t_43 = 0;
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
 0112:     """
 0113:     this is general class to raise an print errors as defined in sndlib. it is to be used internally by the defined error handler registered with sndlib
 0114:     
 0115:     :meta private:
 0116:     """
 0117: 
+0118:     def ___init___(self, message):
/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_11SNDLibError_1___init___(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_8pysndlib_3clm_11SNDLibError_1___init___ = {"___init___", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_11SNDLibError_1___init___, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_8pysndlib_3clm_11SNDLibError_1___init___(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_self = 0;
  CYTHON_UNUSED PyObject *__pyx_v_message = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("___init___ (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_message,0};
    PyObject* values[2] = {0,0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_self)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 118, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_message)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 118, __pyx_L3_error)
        else {
          __Pyx_RaiseArgtupleInvalid("___init___", 1, 2, 2, 1); __PYX_ERR(0, 118, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "___init___") < 0)) __PYX_ERR(0, 118, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 2)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
      values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
    }
    __pyx_v_self = values[0];
    __pyx_v_message = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("___init___", 1, 2, 2, __pyx_nargs); __PYX_ERR(0, 118, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.SNDLibError.___init___", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pysndlib_3clm_11SNDLibError____init___(__pyx_self, __pyx_v_self, __pyx_v_message);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_11SNDLibError____init___(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_message) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("___init___", 0);
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("pysndlib.clm.SNDLibError.___init___", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__92 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_message); if (unlikely(!__pyx_tuple__92)) __PYX_ERR(0, 118, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__92);
  __Pyx_GIVEREF(__pyx_tuple__92);
/* … */
  __pyx_t_43 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_11SNDLibError_1___init___, 0, __pyx_n_s_SNDLibError____init, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__93)); if (unlikely(!__pyx_t_43)) __PYX_ERR(0, 118, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_43);
  __Pyx_INCREF(__pyx_t_43);
  PyList_Append(__pyx_t_42, __pyx_t_43);
  __Pyx_GIVEREF(__pyx_t_43);
  if (__Pyx_SetNameInClass(__pyx_t_37, __pyx_n_s_init_2, __pyx_t_43) < 0) __PYX_ERR(0, 118, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_43); __pyx_t_43 = 0;
  __pyx_codeobj__93 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__92, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_init_2, 118, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__93)) __PYX_ERR(0, 118, __pyx_L1_error)
+0119:         super().__init__(self.message)
  __pyx_t_2 = __Pyx_CyFunction_GetClassObj(__pyx_self);
  if (!__pyx_t_2) { PyErr_SetString(PyExc_SystemError, "super(): empty __class__ cell"); __PYX_ERR(0, 119, __pyx_L1_error) }
  __Pyx_INCREF(__pyx_t_2);
  __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 119, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_2);
  __Pyx_INCREF(__pyx_v_self);
  __Pyx_GIVEREF(__pyx_v_self);
  PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_self);
  __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_super, __pyx_t_3, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 119, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_init); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 119, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_message); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 119, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_4 = NULL;
  __pyx_t_5 = 0;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3);
    if (likely(__pyx_t_4)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_4);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_3, function);
      __pyx_t_5 = 1;
    }
  }
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_t_2};
    __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_5, 1+__pyx_t_5);
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 119, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 0120: 
 0121: 
 0122: 
+0123: def check_ndim(arr: npt.NDArray[np.float64], dim=1):
/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_1check_ndim(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_8pysndlib_3clm_1check_ndim = {"check_ndim", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_1check_ndim, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_8pysndlib_3clm_1check_ndim(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_arr = 0;
  PyObject *__pyx_v_dim = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("check_ndim (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_arr,&__pyx_n_s_dim,0};
    PyObject* values[2] = {0,0};
    values[1] = ((PyObject *)((PyObject *)__pyx_int_1));
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_arr)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 123, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_dim);
          if (value) { values[1] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 123, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "check_ndim") < 0)) __PYX_ERR(0, 123, __pyx_L3_error)
      }
    } else {
      switch (__pyx_nargs) {
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_arr = values[0];
    __pyx_v_dim = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("check_ndim", 0, 1, 2, __pyx_nargs); __PYX_ERR(0, 123, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.check_ndim", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pysndlib_3clm_check_ndim(__pyx_self, __pyx_v_arr, __pyx_v_dim);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_check_ndim(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_arr, PyObject *__pyx_v_dim) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("check_ndim", 0);
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_AddTraceback("pysndlib.clm.check_ndim", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__94 = PyTuple_Pack(2, __pyx_n_s_arr, __pyx_n_s_dim); if (unlikely(!__pyx_tuple__94)) __PYX_ERR(0, 123, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__94);
  __Pyx_GIVEREF(__pyx_tuple__94);
  __pyx_codeobj__95 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__94, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_check_ndim, 123, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__95)) __PYX_ERR(0, 123, __pyx_L1_error)
/* … */
  __pyx_t_41 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 123, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  if (PyDict_SetItem(__pyx_t_41, __pyx_n_s_arr, __pyx_kp_s_npt_NDArray_np_float64) < 0) __PYX_ERR(0, 123, __pyx_L1_error)
  __pyx_t_40 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_1check_ndim, 0, __pyx_n_s_check_ndim, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__95)); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 123, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_40, __pyx_tuple__96);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_40, __pyx_t_41);
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_check_ndim, __pyx_t_40) < 0) __PYX_ERR(0, 123, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
  __pyx_tuple__96 = PyTuple_Pack(1, ((PyObject *)__pyx_int_1)); if (unlikely(!__pyx_tuple__96)) __PYX_ERR(0, 123, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__96);
  __Pyx_GIVEREF(__pyx_tuple__96);
+0124:     if arr.ndim != dim:
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_arr, __pyx_n_s_ndim); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 124, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = PyObject_RichCompare(__pyx_t_1, __pyx_v_dim, Py_NE); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 124, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(0, 124, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (unlikely(__pyx_t_3)) {
/* … */
  }
+0125:         raise TypeError(f'expecting {dim} dimemsions but received {arr.ndim}.')
    __pyx_t_2 = PyTuple_New(5); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 125, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_4 = 0;
    __pyx_t_5 = 127;
    __Pyx_INCREF(__pyx_kp_u_expecting);
    __pyx_t_4 += 10;
    __Pyx_GIVEREF(__pyx_kp_u_expecting);
    PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_kp_u_expecting);
    __pyx_t_1 = __Pyx_PyObject_FormatSimple(__pyx_v_dim, __pyx_empty_unicode); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 125, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_5 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_1) > __pyx_t_5) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_1) : __pyx_t_5;
    __pyx_t_4 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_1);
    __Pyx_GIVEREF(__pyx_t_1);
    PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
    __pyx_t_1 = 0;
    __Pyx_INCREF(__pyx_kp_u_dimemsions_but_received);
    __pyx_t_4 += 25;
    __Pyx_GIVEREF(__pyx_kp_u_dimemsions_but_received);
    PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_kp_u_dimemsions_but_received);
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_arr, __pyx_n_s_ndim); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 125, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_6 = __Pyx_PyObject_FormatSimple(__pyx_t_1, __pyx_empty_unicode); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 125, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_5 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_6) > __pyx_t_5) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_6) : __pyx_t_5;
    __pyx_t_4 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_6);
    __Pyx_GIVEREF(__pyx_t_6);
    PyTuple_SET_ITEM(__pyx_t_2, 3, __pyx_t_6);
    __pyx_t_6 = 0;
    __Pyx_INCREF(__pyx_kp_u__3);
    __pyx_t_4 += 1;
    __Pyx_GIVEREF(__pyx_kp_u__3);
    PyTuple_SET_ITEM(__pyx_t_2, 4, __pyx_kp_u__3);
    __pyx_t_6 = __Pyx_PyUnicode_Join(__pyx_t_2, 5, __pyx_t_4, __pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 125, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_builtin_TypeError, __pyx_t_6); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 125, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __PYX_ERR(0, 125, __pyx_L1_error)
 0126: 
+0127: def check_range(arg: str, x, low=None, high=None):
/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_3check_range(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_8pysndlib_3clm_3check_range = {"check_range", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_3check_range, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_8pysndlib_3clm_3check_range(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_arg = 0;
  PyObject *__pyx_v_x = 0;
  PyObject *__pyx_v_low = 0;
  PyObject *__pyx_v_high = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("check_range (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_arg,&__pyx_n_s_x,&__pyx_n_s_low,&__pyx_n_s_high,0};
    PyObject* values[4] = {0,0,0,0};
    values[2] = ((PyObject *)((PyObject *)Py_None));
    values[3] = ((PyObject *)((PyObject *)Py_None));
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  4: values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_arg)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 127, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_x)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 127, __pyx_L3_error)
        else {
          __Pyx_RaiseArgtupleInvalid("check_range", 0, 2, 4, 1); __PYX_ERR(0, 127, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_low);
          if (value) { values[2] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 127, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_high);
          if (value) { values[3] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 127, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "check_range") < 0)) __PYX_ERR(0, 127, __pyx_L3_error)
      }
    } else {
      switch (__pyx_nargs) {
        case  4: values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_arg = ((PyObject*)values[0]);
    __pyx_v_x = values[1];
    __pyx_v_low = values[2];
    __pyx_v_high = values[3];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("check_range", 0, 2, 4, __pyx_nargs); __PYX_ERR(0, 127, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.check_range", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_arg), (&PyString_Type), 0, "arg", 1))) __PYX_ERR(0, 127, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pysndlib_3clm_2check_range(__pyx_self, __pyx_v_arg, __pyx_v_x, __pyx_v_low, __pyx_v_high);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_2check_range(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_arg, PyObject *__pyx_v_x, PyObject *__pyx_v_low, PyObject *__pyx_v_high) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("check_range", 0);
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("pysndlib.clm.check_range", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__97 = PyTuple_Pack(4, __pyx_n_s_arg, __pyx_n_s_x, __pyx_n_s_low, __pyx_n_s_high); if (unlikely(!__pyx_tuple__97)) __PYX_ERR(0, 127, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__97);
  __Pyx_GIVEREF(__pyx_tuple__97);
  __pyx_codeobj__98 = (PyObject*)__Pyx_PyCode_New(4, 0, 0, 4, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__97, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_check_range, 127, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__98)) __PYX_ERR(0, 127, __pyx_L1_error)
/* … */
  __pyx_t_40 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 127, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  if (PyDict_SetItem(__pyx_t_40, __pyx_n_s_arg, __pyx_n_s_str_2) < 0) __PYX_ERR(0, 127, __pyx_L1_error)
  __pyx_t_41 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_3check_range, 0, __pyx_n_s_check_range, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__98)); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 127, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_41, __pyx_tuple__99);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_41, __pyx_t_40);
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_check_range, __pyx_t_41) < 0) __PYX_ERR(0, 127, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
  __pyx_tuple__99 = PyTuple_Pack(2, ((PyObject *)Py_None), ((PyObject *)Py_None)); if (unlikely(!__pyx_tuple__99)) __PYX_ERR(0, 127, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__99);
  __Pyx_GIVEREF(__pyx_tuple__99);
+0128:     if x is None:
  __pyx_t_1 = (__pyx_v_x == Py_None);
  if (__pyx_t_1) {
/* … */
  }
+0129:         return
    __Pyx_XDECREF(__pyx_r);
    __pyx_r = Py_None; __Pyx_INCREF(Py_None);
    goto __pyx_L0;
+0130:     if low is not None:
  __pyx_t_1 = (__pyx_v_low != Py_None);
  if (__pyx_t_1) {
/* … */
  }
+0131:         if x < low:
    __pyx_t_2 = PyObject_RichCompare(__pyx_v_x, __pyx_v_low, Py_LT); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 131, __pyx_L1_error)
    __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 131, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(__pyx_t_1)) {
/* … */
    }
+0132:             raise ValueError(f'{arg} is out of range. {x} < {low}')
      __pyx_t_2 = PyTuple_New(5); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 132, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_3 = 0;
      __pyx_t_4 = 127;
      __pyx_t_5 = __Pyx_PyObject_FormatSimple(__pyx_v_arg, __pyx_empty_unicode); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 132, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_4 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_5) > __pyx_t_4) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_5) : __pyx_t_4;
      __pyx_t_3 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_5);
      __Pyx_GIVEREF(__pyx_t_5);
      PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_5);
      __pyx_t_5 = 0;
      __Pyx_INCREF(__pyx_kp_u_is_out_of_range);
      __pyx_t_3 += 18;
      __Pyx_GIVEREF(__pyx_kp_u_is_out_of_range);
      PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_kp_u_is_out_of_range);
      __pyx_t_5 = __Pyx_PyObject_FormatSimple(__pyx_v_x, __pyx_empty_unicode); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 132, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_4 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_5) > __pyx_t_4) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_5) : __pyx_t_4;
      __pyx_t_3 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_5);
      __Pyx_GIVEREF(__pyx_t_5);
      PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_t_5);
      __pyx_t_5 = 0;
      __Pyx_INCREF(__pyx_kp_u__14);
      __pyx_t_3 += 3;
      __Pyx_GIVEREF(__pyx_kp_u__14);
      PyTuple_SET_ITEM(__pyx_t_2, 3, __pyx_kp_u__14);
      __pyx_t_5 = __Pyx_PyObject_FormatSimple(__pyx_v_low, __pyx_empty_unicode); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 132, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_4 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_5) > __pyx_t_4) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_5) : __pyx_t_4;
      __pyx_t_3 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_5);
      __Pyx_GIVEREF(__pyx_t_5);
      PyTuple_SET_ITEM(__pyx_t_2, 4, __pyx_t_5);
      __pyx_t_5 = 0;
      __pyx_t_5 = __Pyx_PyUnicode_Join(__pyx_t_2, 5, __pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 132, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_5); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 132, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_Raise(__pyx_t_2, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __PYX_ERR(0, 132, __pyx_L1_error)
+0133:     if high is not None:
  __pyx_t_1 = (__pyx_v_high != Py_None);
  if (__pyx_t_1) {
/* … */
  }
+0134:         if x > high:
    __pyx_t_2 = PyObject_RichCompare(__pyx_v_x, __pyx_v_high, Py_GT); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 134, __pyx_L1_error)
    __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 134, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(__pyx_t_1)) {
/* … */
    }
+0135:             raise ValueError(f'{arg} is out of range. {x} > {high}')
      __pyx_t_2 = PyTuple_New(5); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 135, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_3 = 0;
      __pyx_t_4 = 127;
      __pyx_t_5 = __Pyx_PyObject_FormatSimple(__pyx_v_arg, __pyx_empty_unicode); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 135, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_4 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_5) > __pyx_t_4) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_5) : __pyx_t_4;
      __pyx_t_3 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_5);
      __Pyx_GIVEREF(__pyx_t_5);
      PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_5);
      __pyx_t_5 = 0;
      __Pyx_INCREF(__pyx_kp_u_is_out_of_range);
      __pyx_t_3 += 18;
      __Pyx_GIVEREF(__pyx_kp_u_is_out_of_range);
      PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_kp_u_is_out_of_range);
      __pyx_t_5 = __Pyx_PyObject_FormatSimple(__pyx_v_x, __pyx_empty_unicode); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 135, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_4 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_5) > __pyx_t_4) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_5) : __pyx_t_4;
      __pyx_t_3 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_5);
      __Pyx_GIVEREF(__pyx_t_5);
      PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_t_5);
      __pyx_t_5 = 0;
      __Pyx_INCREF(__pyx_kp_u__15);
      __pyx_t_3 += 3;
      __Pyx_GIVEREF(__pyx_kp_u__15);
      PyTuple_SET_ITEM(__pyx_t_2, 3, __pyx_kp_u__15);
      __pyx_t_5 = __Pyx_PyObject_FormatSimple(__pyx_v_high, __pyx_empty_unicode); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 135, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_4 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_5) > __pyx_t_4) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_5) : __pyx_t_4;
      __pyx_t_3 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_5);
      __Pyx_GIVEREF(__pyx_t_5);
      PyTuple_SET_ITEM(__pyx_t_2, 4, __pyx_t_5);
      __pyx_t_5 = 0;
      __pyx_t_5 = __Pyx_PyUnicode_Join(__pyx_t_2, 5, __pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 135, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_5); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 135, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_Raise(__pyx_t_2, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __PYX_ERR(0, 135, __pyx_L1_error)
 0136: 
 0137: 
+0138: def compare_shapes(arr1: npt.NDArray[np.float64], arr2: npt.NDArray[np.float64]):
/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_5compare_shapes(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_8pysndlib_3clm_5compare_shapes = {"compare_shapes", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_5compare_shapes, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_8pysndlib_3clm_5compare_shapes(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_arr1 = 0;
  PyObject *__pyx_v_arr2 = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("compare_shapes (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_arr1,&__pyx_n_s_arr2,0};
    PyObject* values[2] = {0,0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_arr1)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 138, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_arr2)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 138, __pyx_L3_error)
        else {
          __Pyx_RaiseArgtupleInvalid("compare_shapes", 1, 2, 2, 1); __PYX_ERR(0, 138, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "compare_shapes") < 0)) __PYX_ERR(0, 138, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 2)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
      values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
    }
    __pyx_v_arr1 = values[0];
    __pyx_v_arr2 = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("compare_shapes", 1, 2, 2, __pyx_nargs); __PYX_ERR(0, 138, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.compare_shapes", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pysndlib_3clm_4compare_shapes(__pyx_self, __pyx_v_arr1, __pyx_v_arr2);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_4compare_shapes(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_arr1, PyObject *__pyx_v_arr2) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("compare_shapes", 0);
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("pysndlib.clm.compare_shapes", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__100 = PyTuple_Pack(2, __pyx_n_s_arr1, __pyx_n_s_arr2); if (unlikely(!__pyx_tuple__100)) __PYX_ERR(0, 138, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__100);
  __Pyx_GIVEREF(__pyx_tuple__100);
/* … */
  __pyx_t_41 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 138, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  if (PyDict_SetItem(__pyx_t_41, __pyx_n_s_arr1, __pyx_kp_s_npt_NDArray_np_float64) < 0) __PYX_ERR(0, 138, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_41, __pyx_n_s_arr2, __pyx_kp_s_npt_NDArray_np_float64) < 0) __PYX_ERR(0, 138, __pyx_L1_error)
  __pyx_t_40 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_5compare_shapes, 0, __pyx_n_s_compare_shapes, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__101)); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 138, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_40, __pyx_t_41);
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_compare_shapes, __pyx_t_40) < 0) __PYX_ERR(0, 138, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
  __pyx_codeobj__101 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__100, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_compare_shapes, 138, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__101)) __PYX_ERR(0, 138, __pyx_L1_error)
+0139:     if arr1.shape != arr2.shape:
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_arr1, __pyx_n_s_shape); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 139, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_arr2, __pyx_n_s_shape); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 139, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = PyObject_RichCompare(__pyx_t_1, __pyx_t_2, Py_NE); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 139, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely((__pyx_t_4 < 0))) __PYX_ERR(0, 139, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(__pyx_t_4)) {
/* … */
  }
+0140:         raise RuntimeError(f'ndarrays of unequal shape {arr1.shape } vs. {arr2.shape }.')
    __pyx_t_3 = PyTuple_New(5); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 140, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_5 = 0;
    __pyx_t_6 = 127;
    __Pyx_INCREF(__pyx_kp_u_ndarrays_of_unequal_shape);
    __pyx_t_5 += 26;
    __Pyx_GIVEREF(__pyx_kp_u_ndarrays_of_unequal_shape);
    PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_kp_u_ndarrays_of_unequal_shape);
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_arr1, __pyx_n_s_shape); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 140, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_1 = __Pyx_PyObject_FormatSimple(__pyx_t_2, __pyx_empty_unicode); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 140, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_6 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_1) > __pyx_t_6) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_1) : __pyx_t_6;
    __pyx_t_5 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_1);
    __Pyx_GIVEREF(__pyx_t_1);
    PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_1);
    __pyx_t_1 = 0;
    __Pyx_INCREF(__pyx_kp_u_vs);
    __pyx_t_5 += 5;
    __Pyx_GIVEREF(__pyx_kp_u_vs);
    PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_kp_u_vs);
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_arr2, __pyx_n_s_shape); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 140, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_2 = __Pyx_PyObject_FormatSimple(__pyx_t_1, __pyx_empty_unicode); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 140, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_6 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_2) > __pyx_t_6) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_2) : __pyx_t_6;
    __pyx_t_5 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_2);
    __Pyx_GIVEREF(__pyx_t_2);
    PyTuple_SET_ITEM(__pyx_t_3, 3, __pyx_t_2);
    __pyx_t_2 = 0;
    __Pyx_INCREF(__pyx_kp_u__3);
    __pyx_t_5 += 1;
    __Pyx_GIVEREF(__pyx_kp_u__3);
    PyTuple_SET_ITEM(__pyx_t_3, 4, __pyx_kp_u__3);
    __pyx_t_2 = __Pyx_PyUnicode_Join(__pyx_t_3, 5, __pyx_t_5, __pyx_t_6); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 140, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_builtin_RuntimeError, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 140, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_Raise(__pyx_t_3, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __PYX_ERR(0, 140, __pyx_L1_error)
 0141: 
+0142: csndlib.mus_error_set_handler(<csndlib.mus_error_handler_t *>clm_error_handler)
  (void)(mus_error_set_handler(((mus_error_handler_t *)__pyx_f_8pysndlib_3clm_clm_error_handler)));
 0143: 
 0144: 
+0145: cdef bint is_simple_filter(gen: mus_any):
static int __pyx_f_8pysndlib_3clm_is_simple_filter(struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_simple_filter", 0);
/* … */
  /* function exit code */
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+0146:     return cclm.mus_is_one_zero(gen._ptr) or cclm.mus_is_one_pole(gen._ptr) or cclm.mus_is_two_zero(gen._ptr) or cclm.mus_is_two_pole(gen._ptr)
  __pyx_t_2 = mus_is_one_zero(__pyx_v_gen->_ptr);
  if (!__pyx_t_2) {
  } else {
    __pyx_t_1 = __pyx_t_2;
    goto __pyx_L3_bool_binop_done;
  }
  __pyx_t_2 = mus_is_one_pole(__pyx_v_gen->_ptr);
  if (!__pyx_t_2) {
  } else {
    __pyx_t_1 = __pyx_t_2;
    goto __pyx_L3_bool_binop_done;
  }
  __pyx_t_2 = mus_is_two_zero(__pyx_v_gen->_ptr);
  if (!__pyx_t_2) {
  } else {
    __pyx_t_1 = __pyx_t_2;
    goto __pyx_L3_bool_binop_done;
  }
  __pyx_t_2 = mus_is_two_pole(__pyx_v_gen->_ptr);
  __pyx_t_1 = __pyx_t_2;
  __pyx_L3_bool_binop_done:;
  __pyx_r = __pyx_t_1;
  goto __pyx_L0;
 0147: 
 0148: 
 0149: 
 0150: # todo add mus_set_xcoeff and mus_set_ycoeff
 0151: 
 0152: # --------------- extension types ---------------- #
 0153: 
+0154: cdef class mus_any:
struct __pyx_obj_8pysndlib_3clm_mus_any {
  PyObject_HEAD
  struct __pyx_vtabstruct_8pysndlib_3clm_mus_any *__pyx_vtab;
  mus_any *_ptr;
  int ptr_owner;
  input_cb _inputcallback;
  edit_cb _editcallback;
  analyze_cb _analyzecallback;
  synthesize_cb _synthesizecallback;
  PyObject *_cache;
  mus_float_t *_data_ptr;
  PyArrayObject *_data;
  mus_float_t *_xcoeffs_ptr;
  PyArrayObject *_xcoeffs;
  mus_float_t *_ycoeffs_ptr;
  PyArrayObject *_ycoeffs;
  mus_float_t *_pv_amp_increments_ptr;
  PyArrayObject *_pv_amp_increments;
  mus_float_t *_pv_amps_ptr;
  PyArrayObject *_pv_amps;
  mus_float_t *_pv_freqs_ptr;
  PyArrayObject *_pv_freqs;
  mus_float_t *_pv_phases_ptr;
  PyArrayObject *_pv_phases;
  mus_float_t *_pv_phase_increments_ptr;
  PyArrayObject *_pv_phase_increments;
};
/* … */
struct __pyx_vtabstruct_8pysndlib_3clm_mus_any {
  struct __pyx_obj_8pysndlib_3clm_mus_any *(*from_ptr)(mus_any *, struct __pyx_opt_args_8pysndlib_3clm_7mus_any_from_ptr *__pyx_optional_args);
  PyObject *(*cache_append)(struct __pyx_obj_8pysndlib_3clm_mus_any *, PyObject *, int __pyx_skip_dispatch);
  PyObject *(*cache_extend)(struct __pyx_obj_8pysndlib_3clm_mus_any *, PyObject *, int __pyx_skip_dispatch);
  PyObject *(*set_up_data)(struct __pyx_obj_8pysndlib_3clm_mus_any *, int __pyx_skip_dispatch);
  PyObject *(*set_up_xcoeffs)(struct __pyx_obj_8pysndlib_3clm_mus_any *, int __pyx_skip_dispatch);
  PyObject *(*set_up_ycoeffs)(struct __pyx_obj_8pysndlib_3clm_mus_any *, int __pyx_skip_dispatch);
  PyObject *(*set_up_pv_data)(struct __pyx_obj_8pysndlib_3clm_mus_any *, int __pyx_skip_dispatch);
};
static struct __pyx_vtabstruct_8pysndlib_3clm_mus_any *__pyx_vtabptr_8pysndlib_3clm_mus_any;

 0155:     """
 0156:     a wrapper class for mus_any pointers in c
 0157:     
 0158:     instances of this class have the following properties, which may be 
 0159:     used if supported by the type of generator used to make the instance:
 0160:     
 0161:     
 0162:     """
 0163: 
 0164:     cdef cclm.mus_any *_ptr
 0165:     cdef bint ptr_owner
 0166:     cdef cclm.input_cb _inputcallback
 0167:     cdef cclm.edit_cb _editcallback
 0168:     cdef cclm.analyze_cb _analyzecallback
 0169:     cdef cclm.synthesize_cb _synthesizecallback
 0170:     cdef list _cache
 0171:     cdef cclm.mus_float_t* _data_ptr
 0172:     cdef np.ndarray _data
 0173:     cdef cclm.mus_float_t* _xcoeffs_ptr
 0174:     cdef np.ndarray _xcoeffs
 0175:     cdef cclm.mus_float_t* _ycoeffs_ptr
 0176:     cdef np.ndarray _ycoeffs
 0177:     cdef cclm.mus_float_t* _pv_amp_increments_ptr
 0178:     cdef np.ndarray _pv_amp_increments
 0179:     cdef cclm.mus_float_t* _pv_amps_ptr
 0180:     cdef np.ndarray _pv_amps
 0181:     cdef cclm.mus_float_t* _pv_freqs_ptr
 0182:     cdef np.ndarray _pv_freqs
 0183:     cdef cclm.mus_float_t* _pv_phases_ptr
 0184:     cdef np.ndarray _pv_phases
 0185:     cdef cclm.mus_float_t* _pv_phase_increments_ptr
 0186:     cdef np.ndarray _pv_phase_increments
 0187: 
+0188:     def __cinit__(self):
/* Python wrapper */
static int __pyx_pw_8pysndlib_3clm_7mus_any_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_pw_8pysndlib_3clm_7mus_any_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0);
  if (unlikely(__pyx_nargs > 0)) {
    __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 0, 0, __pyx_nargs); return -1;}
  if (unlikely(__pyx_kwds) && __Pyx_NumKwargs_VARARGS(__pyx_kwds) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "__cinit__", 0))) return -1;
  __pyx_r = __pyx_pf_8pysndlib_3clm_7mus_any___cinit__(((struct __pyx_obj_8pysndlib_3clm_mus_any *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_8pysndlib_3clm_7mus_any___cinit__(struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_self) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__cinit__", 0);
/* … */
  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pysndlib.clm.mus_any.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+0189:         self.ptr_owner = False
  __pyx_v_self->ptr_owner = 0;
+0190:         self._cache = []
  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 190, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v_self->_cache);
  __Pyx_DECREF(__pyx_v_self->_cache);
  __pyx_v_self->_cache = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
+0191:         self._inputcallback = NULL
  __pyx_v_self->_inputcallback = NULL;
+0192:         self._editcallback = NULL
  __pyx_v_self->_editcallback = NULL;
+0193:         self._analyzecallback = NULL
  __pyx_v_self->_analyzecallback = NULL;
+0194:         self._synthesizecallback = NULL
  __pyx_v_self->_synthesizecallback = NULL;
+0195:         self._cache = []
  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 195, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v_self->_cache);
  __Pyx_DECREF(__pyx_v_self->_cache);
  __pyx_v_self->_cache = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
 0196: 
 0197: 
+0198:     def __delalloc__(self):
/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_7mus_any_3__delalloc__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_8pysndlib_3clm_7mus_any_3__delalloc__ = {"__delalloc__", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_7mus_any_3__delalloc__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_8pysndlib_3clm_7mus_any_3__delalloc__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__delalloc__ (wrapper)", 0);
  if (unlikely(__pyx_nargs > 0)) {
    __Pyx_RaiseArgtupleInvalid("__delalloc__", 1, 0, 0, __pyx_nargs); return NULL;}
  if (unlikely(__pyx_kwds) && __Pyx_NumKwargs_FASTCALL(__pyx_kwds) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "__delalloc__", 0))) return NULL;
  __pyx_r = __pyx_pf_8pysndlib_3clm_7mus_any_2__delalloc__(((struct __pyx_obj_8pysndlib_3clm_mus_any *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_7mus_any_2__delalloc__(struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__delalloc__", 0);
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_40 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_7mus_any_3__delalloc__, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_mus_any___delalloc, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__102)); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 198, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  if (PyDict_SetItem((PyObject *)__pyx_ptype_8pysndlib_3clm_mus_any->tp_dict, __pyx_n_s_delalloc, __pyx_t_40) < 0) __PYX_ERR(0, 198, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
  PyType_Modified(__pyx_ptype_8pysndlib_3clm_mus_any);
/* … */
  __pyx_codeobj__102 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__72, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_delalloc, 198, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__102)) __PYX_ERR(0, 198, __pyx_L1_error)
+0199:         if self._ptr is not NULL and self.ptr_owner is True:
  __pyx_t_2 = (__pyx_v_self->_ptr != NULL);
  if (__pyx_t_2) {
  } else {
    __pyx_t_1 = __pyx_t_2;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_2 = (__pyx_v_self->ptr_owner == 1);
  __pyx_t_1 = __pyx_t_2;
  __pyx_L4_bool_binop_done:;
  if (__pyx_t_1) {
/* … */
  }
+0200:             cclm.mus_free(self._ptr)
    mus_free(__pyx_v_self->_ptr);
+0201:             self._ptr = NULL
    __pyx_v_self->_ptr = NULL;
 0202: 
 0203: 
+0204:     def __init__(self):
/* Python wrapper */
static int __pyx_pw_8pysndlib_3clm_7mus_any_5__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_pw_8pysndlib_3clm_7mus_any_5__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__init__ (wrapper)", 0);
  if (unlikely(__pyx_nargs > 0)) {
    __Pyx_RaiseArgtupleInvalid("__init__", 1, 0, 0, __pyx_nargs); return -1;}
  if (unlikely(__pyx_kwds) && __Pyx_NumKwargs_VARARGS(__pyx_kwds) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "__init__", 0))) return -1;
  __pyx_r = __pyx_pf_8pysndlib_3clm_7mus_any_4__init__(((struct __pyx_obj_8pysndlib_3clm_mus_any *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_8pysndlib_3clm_7mus_any_4__init__(CYTHON_UNUSED struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_self) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__init__", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pysndlib.clm.mus_any.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 0205:         # prevent accidental instantiation from normal python code
 0206:         # since we cannot pass a struct pointer into a python constructor.
+0207:         raise TypeError("this class cannot be instantiated directly.")
  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__16, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 207, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_Raise(__pyx_t_1, 0, 0, 0);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __PYX_ERR(0, 207, __pyx_L1_error)
/* … */
  __pyx_tuple__16 = PyTuple_Pack(1, __pyx_kp_s_this_class_cannot_be_instantiate); if (unlikely(!__pyx_tuple__16)) __PYX_ERR(0, 207, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__16);
  __Pyx_GIVEREF(__pyx_tuple__16);
 0208: 
 0209:     @staticmethod
+0210:     cdef mus_any from_ptr(cclm.mus_any *_ptr, bint owner=True):
static struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_f_8pysndlib_3clm_7mus_any_from_ptr(mus_any *__pyx_v__ptr, struct __pyx_opt_args_8pysndlib_3clm_7mus_any_from_ptr *__pyx_optional_args) {
  int __pyx_v_owner = ((int)1);
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_wrapper = 0;
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("from_ptr", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_owner = __pyx_optional_args->owner;
    }
  }
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pysndlib.clm.mus_any.from_ptr", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_wrapper);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
struct __pyx_opt_args_8pysndlib_3clm_7mus_any_from_ptr {
  int __pyx_n;
  int owner;
};
 0211:         """
 0212:         factory function to create mus_any objects from
 0213:         given mus_any pointer.
 0214: 
 0215:         setting ``owner`` flag to ``True`` causes
 0216:         the extension type to ``free`` the structure pointed to by ``_ptr``
 0217:         when the wrapper object is deallocated.
 0218: 
 0219:         :meta private:
 0220:         """
 0221:         # fast call to __new__() that bypasses the __init__() constructor.
+0222:         cdef mus_any wrapper = mus_any.__new__(mus_any)
  __pyx_t_1 = ((PyObject *)__pyx_tp_new_8pysndlib_3clm_mus_any(((PyTypeObject *)__pyx_ptype_8pysndlib_3clm_mus_any), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 222, __pyx_L1_error)
  __Pyx_GOTREF((PyObject *)__pyx_t_1);
  __pyx_v_wrapper = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)__pyx_t_1);
  __pyx_t_1 = 0;
+0223:         wrapper._ptr = _ptr
  __pyx_v_wrapper->_ptr = __pyx_v__ptr;
+0224:         wrapper.ptr_owner = owner
  __pyx_v_wrapper->ptr_owner = __pyx_v_owner;
+0225:         if cclm.mus_data_exists(wrapper._ptr):
  __pyx_t_2 = mus_data_exists(__pyx_v_wrapper->_ptr);
  if (__pyx_t_2) {
/* … */
  }
+0226:             wrapper.set_up_data()
    __pyx_t_1 = ((struct __pyx_vtabstruct_8pysndlib_3clm_mus_any *)__pyx_v_wrapper->__pyx_vtab)->set_up_data(__pyx_v_wrapper, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 226, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+0227:         if cclm.mus_xcoeffs_exists(wrapper._ptr):
  __pyx_t_2 = mus_xcoeffs_exists(__pyx_v_wrapper->_ptr);
  if (__pyx_t_2) {
/* … */
  }
+0228:             wrapper.set_up_xcoeffs()
    __pyx_t_1 = ((struct __pyx_vtabstruct_8pysndlib_3clm_mus_any *)__pyx_v_wrapper->__pyx_vtab)->set_up_xcoeffs(__pyx_v_wrapper, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 228, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+0229:         if cclm.mus_ycoeffs_exists(wrapper._ptr):
  __pyx_t_2 = mus_ycoeffs_exists(__pyx_v_wrapper->_ptr);
  if (__pyx_t_2) {
/* … */
  }
+0230:             wrapper.set_up_ycoeffs()
    __pyx_t_1 = ((struct __pyx_vtabstruct_8pysndlib_3clm_mus_any *)__pyx_v_wrapper->__pyx_vtab)->set_up_ycoeffs(__pyx_v_wrapper, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 230, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+0231:         if is_phase_vocoder(wrapper):
  __pyx_t_2 = __pyx_f_8pysndlib_3clm_is_phase_vocoder(__pyx_v_wrapper, 0); if (unlikely(__pyx_t_2 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 231, __pyx_L1_error)
  if (__pyx_t_2) {
/* … */
  }
+0232:             wrapper.set_up_pv_data()
    __pyx_t_1 = ((struct __pyx_vtabstruct_8pysndlib_3clm_mus_any *)__pyx_v_wrapper->__pyx_vtab)->set_up_pv_data(__pyx_v_wrapper, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 232, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 0233: 
+0234:         return wrapper
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __Pyx_INCREF((PyObject *)__pyx_v_wrapper);
  __pyx_r = __pyx_v_wrapper;
  goto __pyx_L0;
 0235: 
+0236:     cpdef cache_append(self, obj):
static PyObject *__pyx_pw_8pysndlib_3clm_7mus_any_7cache_append(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyObject *__pyx_f_8pysndlib_3clm_7mus_any_cache_append(struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_self, PyObject *__pyx_v_obj, int __pyx_skip_dispatch) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("cache_append", 0);
  /* Check if called by wrapper */
  if (unlikely(__pyx_skip_dispatch)) ;
  /* Check if overridden in Python */
  else if (unlikely((Py_TYPE(((PyObject *)__pyx_v_self))->tp_dictoffset != 0) || __Pyx_PyType_HasFeature(Py_TYPE(((PyObject *)__pyx_v_self)), (Py_TPFLAGS_IS_ABSTRACT | Py_TPFLAGS_HEAPTYPE)))) {
    #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
    static PY_UINT64_T __pyx_tp_dict_version = __PYX_DICT_VERSION_INIT, __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT;
    if (unlikely(!__Pyx_object_dict_version_matches(((PyObject *)__pyx_v_self), __pyx_tp_dict_version, __pyx_obj_dict_version))) {
      PY_UINT64_T __pyx_typedict_guard = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self));
      #endif
      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_cache_append); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 236, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      #ifdef __Pyx_CyFunction_USED
      if (!__Pyx_IsCyOrPyCFunction(__pyx_t_1)
      #else
      if (!PyCFunction_Check(__pyx_t_1)
      #endif
              || (PyCFunction_GET_FUNCTION(__pyx_t_1) != (PyCFunction)(void*)__pyx_pw_8pysndlib_3clm_7mus_any_7cache_append)) {
        __Pyx_XDECREF(__pyx_r);
        __Pyx_INCREF(__pyx_t_1);
        __pyx_t_3 = __pyx_t_1; __pyx_t_4 = NULL;
        __pyx_t_5 = 0;
        if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
          __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3);
          if (likely(__pyx_t_4)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
            __Pyx_INCREF(__pyx_t_4);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_3, function);
            __pyx_t_5 = 1;
          }
        }
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_v_obj};
          __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_5, 1+__pyx_t_5);
          __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
          if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 236, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
        }
        __pyx_r = __pyx_t_2;
        __pyx_t_2 = 0;
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        goto __pyx_L0;
      }
      #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
      __pyx_tp_dict_version = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self));
      __pyx_obj_dict_version = __Pyx_get_object_dict_version(((PyObject *)__pyx_v_self));
      if (unlikely(__pyx_typedict_guard != __pyx_tp_dict_version)) {
        __pyx_tp_dict_version = __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT;
      }
      #endif
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
    }
    #endif
  }
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("pysndlib.clm.mus_any.cache_append", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_7mus_any_7cache_append(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_7mus_any_6cache_append, "\n        :meta private:\n        ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_7mus_any_7cache_append = {"cache_append", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_7mus_any_7cache_append, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_7mus_any_6cache_append};
static PyObject *__pyx_pw_8pysndlib_3clm_7mus_any_7cache_append(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_obj = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("cache_append (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_obj,0};
    PyObject* values[1] = {0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_obj)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 236, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "cache_append") < 0)) __PYX_ERR(0, 236, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
    }
    __pyx_v_obj = values[0];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("cache_append", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 236, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.mus_any.cache_append", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pysndlib_3clm_7mus_any_6cache_append(((struct __pyx_obj_8pysndlib_3clm_mus_any *)__pyx_v_self), __pyx_v_obj);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_7mus_any_6cache_append(struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_self, PyObject *__pyx_v_obj) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("cache_append", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_8pysndlib_3clm_7mus_any_cache_append(__pyx_v_self, __pyx_v_obj, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 236, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pysndlib.clm.mus_any.cache_append", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__103 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_obj); if (unlikely(!__pyx_tuple__103)) __PYX_ERR(0, 236, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__103);
  __Pyx_GIVEREF(__pyx_tuple__103);
/* … */
  __pyx_t_40 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_7mus_any_7cache_append, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_mus_any_cache_append, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__104)); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 236, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  if (PyDict_SetItem((PyObject *)__pyx_ptype_8pysndlib_3clm_mus_any->tp_dict, __pyx_n_s_cache_append, __pyx_t_40) < 0) __PYX_ERR(0, 236, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
  PyType_Modified(__pyx_ptype_8pysndlib_3clm_mus_any);
  __pyx_codeobj__104 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__103, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_cache_append, 236, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__104)) __PYX_ERR(0, 236, __pyx_L1_error)
 0237:         """
 0238:         :meta private:
 0239:         """
+0240:         self._cache.append(obj)
  if (unlikely(__pyx_v_self->_cache == Py_None)) {
    PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "append");
    __PYX_ERR(0, 240, __pyx_L1_error)
  }
  __pyx_t_6 = __Pyx_PyList_Append(__pyx_v_self->_cache, __pyx_v_obj); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(0, 240, __pyx_L1_error)
 0241: 
+0242:     cpdef cache_extend(self, obj):
static PyObject *__pyx_pw_8pysndlib_3clm_7mus_any_9cache_extend(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyObject *__pyx_f_8pysndlib_3clm_7mus_any_cache_extend(struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_self, PyObject *__pyx_v_obj, int __pyx_skip_dispatch) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("cache_extend", 0);
  /* Check if called by wrapper */
  if (unlikely(__pyx_skip_dispatch)) ;
  /* Check if overridden in Python */
  else if (unlikely((Py_TYPE(((PyObject *)__pyx_v_self))->tp_dictoffset != 0) || __Pyx_PyType_HasFeature(Py_TYPE(((PyObject *)__pyx_v_self)), (Py_TPFLAGS_IS_ABSTRACT | Py_TPFLAGS_HEAPTYPE)))) {
    #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
    static PY_UINT64_T __pyx_tp_dict_version = __PYX_DICT_VERSION_INIT, __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT;
    if (unlikely(!__Pyx_object_dict_version_matches(((PyObject *)__pyx_v_self), __pyx_tp_dict_version, __pyx_obj_dict_version))) {
      PY_UINT64_T __pyx_typedict_guard = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self));
      #endif
      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_cache_extend); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 242, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      #ifdef __Pyx_CyFunction_USED
      if (!__Pyx_IsCyOrPyCFunction(__pyx_t_1)
      #else
      if (!PyCFunction_Check(__pyx_t_1)
      #endif
              || (PyCFunction_GET_FUNCTION(__pyx_t_1) != (PyCFunction)(void*)__pyx_pw_8pysndlib_3clm_7mus_any_9cache_extend)) {
        __Pyx_XDECREF(__pyx_r);
        __Pyx_INCREF(__pyx_t_1);
        __pyx_t_3 = __pyx_t_1; __pyx_t_4 = NULL;
        __pyx_t_5 = 0;
        if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
          __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3);
          if (likely(__pyx_t_4)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
            __Pyx_INCREF(__pyx_t_4);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_3, function);
            __pyx_t_5 = 1;
          }
        }
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_v_obj};
          __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_5, 1+__pyx_t_5);
          __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
          if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 242, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
        }
        __pyx_r = __pyx_t_2;
        __pyx_t_2 = 0;
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        goto __pyx_L0;
      }
      #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
      __pyx_tp_dict_version = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self));
      __pyx_obj_dict_version = __Pyx_get_object_dict_version(((PyObject *)__pyx_v_self));
      if (unlikely(__pyx_typedict_guard != __pyx_tp_dict_version)) {
        __pyx_tp_dict_version = __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT;
      }
      #endif
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
    }
    #endif
  }
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("pysndlib.clm.mus_any.cache_extend", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_7mus_any_9cache_extend(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_7mus_any_8cache_extend, "\n        :meta private:\n        ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_7mus_any_9cache_extend = {"cache_extend", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_7mus_any_9cache_extend, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_7mus_any_8cache_extend};
static PyObject *__pyx_pw_8pysndlib_3clm_7mus_any_9cache_extend(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_obj = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("cache_extend (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_obj,0};
    PyObject* values[1] = {0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_obj)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 242, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "cache_extend") < 0)) __PYX_ERR(0, 242, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
    }
    __pyx_v_obj = values[0];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("cache_extend", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 242, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.mus_any.cache_extend", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pysndlib_3clm_7mus_any_8cache_extend(((struct __pyx_obj_8pysndlib_3clm_mus_any *)__pyx_v_self), __pyx_v_obj);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_7mus_any_8cache_extend(struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_self, PyObject *__pyx_v_obj) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("cache_extend", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_8pysndlib_3clm_7mus_any_cache_extend(__pyx_v_self, __pyx_v_obj, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 242, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pysndlib.clm.mus_any.cache_extend", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_40 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_7mus_any_9cache_extend, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_mus_any_cache_extend, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__105)); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 242, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  if (PyDict_SetItem((PyObject *)__pyx_ptype_8pysndlib_3clm_mus_any->tp_dict, __pyx_n_s_cache_extend, __pyx_t_40) < 0) __PYX_ERR(0, 242, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
  PyType_Modified(__pyx_ptype_8pysndlib_3clm_mus_any);
/* … */
  __pyx_codeobj__105 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__103, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_cache_extend, 242, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__105)) __PYX_ERR(0, 242, __pyx_L1_error)
 0243:         """
 0244:         :meta private:
 0245:         """
+0246:         self._cache.extend(obj)
  if (unlikely(__pyx_v_self->_cache == Py_None)) {
    PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "extend");
    __PYX_ERR(0, 246, __pyx_L1_error)
  }
  __pyx_t_6 = __Pyx_PyList_Extend(__pyx_v_self->_cache, __pyx_v_obj); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(0, 246, __pyx_L1_error)
 0247: 
 0248:     # this stuff with view.array is to work around an apparent bug when automatic string handling is turned on
 0249:     # https://github.com/cython/cython/issues/4521        
+0250:     cpdef set_up_data(self):
static PyObject *__pyx_pw_8pysndlib_3clm_7mus_any_11set_up_data(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyObject *__pyx_f_8pysndlib_3clm_7mus_any_set_up_data(struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_self, int __pyx_skip_dispatch) {
  struct __pyx_array_obj *__pyx_v_arr = 0;
  mus_long_t __pyx_v_size;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("set_up_data", 0);
  /* Check if called by wrapper */
  if (unlikely(__pyx_skip_dispatch)) ;
  /* Check if overridden in Python */
  else if (unlikely((Py_TYPE(((PyObject *)__pyx_v_self))->tp_dictoffset != 0) || __Pyx_PyType_HasFeature(Py_TYPE(((PyObject *)__pyx_v_self)), (Py_TPFLAGS_IS_ABSTRACT | Py_TPFLAGS_HEAPTYPE)))) {
    #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
    static PY_UINT64_T __pyx_tp_dict_version = __PYX_DICT_VERSION_INIT, __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT;
    if (unlikely(!__Pyx_object_dict_version_matches(((PyObject *)__pyx_v_self), __pyx_tp_dict_version, __pyx_obj_dict_version))) {
      PY_UINT64_T __pyx_typedict_guard = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self));
      #endif
      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_set_up_data); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 250, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      #ifdef __Pyx_CyFunction_USED
      if (!__Pyx_IsCyOrPyCFunction(__pyx_t_1)
      #else
      if (!PyCFunction_Check(__pyx_t_1)
      #endif
              || (PyCFunction_GET_FUNCTION(__pyx_t_1) != (PyCFunction)(void*)__pyx_pw_8pysndlib_3clm_7mus_any_11set_up_data)) {
        __Pyx_XDECREF(__pyx_r);
        __Pyx_INCREF(__pyx_t_1);
        __pyx_t_3 = __pyx_t_1; __pyx_t_4 = NULL;
        __pyx_t_5 = 0;
        if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
          __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3);
          if (likely(__pyx_t_4)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
            __Pyx_INCREF(__pyx_t_4);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_3, function);
            __pyx_t_5 = 1;
          }
        }
        {
          PyObject *__pyx_callargs[1] = {__pyx_t_4, };
          __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_5, 0+__pyx_t_5);
          __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
          if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 250, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
        }
        __pyx_r = __pyx_t_2;
        __pyx_t_2 = 0;
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        goto __pyx_L0;
      }
      #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
      __pyx_tp_dict_version = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self));
      __pyx_obj_dict_version = __Pyx_get_object_dict_version(((PyObject *)__pyx_v_self));
      if (unlikely(__pyx_typedict_guard != __pyx_tp_dict_version)) {
        __pyx_tp_dict_version = __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT;
      }
      #endif
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
    }
    #endif
  }
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("pysndlib.clm.mus_any.set_up_data", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_arr);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_7mus_any_11set_up_data(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_7mus_any_10set_up_data, "\n        :meta private:\n        ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_7mus_any_11set_up_data = {"set_up_data", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_7mus_any_11set_up_data, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_7mus_any_10set_up_data};
static PyObject *__pyx_pw_8pysndlib_3clm_7mus_any_11set_up_data(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("set_up_data (wrapper)", 0);
  if (unlikely(__pyx_nargs > 0)) {
    __Pyx_RaiseArgtupleInvalid("set_up_data", 1, 0, 0, __pyx_nargs); return NULL;}
  if (unlikely(__pyx_kwds) && __Pyx_NumKwargs_FASTCALL(__pyx_kwds) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "set_up_data", 0))) return NULL;
  __pyx_r = __pyx_pf_8pysndlib_3clm_7mus_any_10set_up_data(((struct __pyx_obj_8pysndlib_3clm_mus_any *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_7mus_any_10set_up_data(struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("set_up_data", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_8pysndlib_3clm_7mus_any_set_up_data(__pyx_v_self, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 250, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pysndlib.clm.mus_any.set_up_data", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_40 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_7mus_any_11set_up_data, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_mus_any_set_up_data, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__106)); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 250, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  if (PyDict_SetItem((PyObject *)__pyx_ptype_8pysndlib_3clm_mus_any->tp_dict, __pyx_n_s_set_up_data, __pyx_t_40) < 0) __PYX_ERR(0, 250, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
  PyType_Modified(__pyx_ptype_8pysndlib_3clm_mus_any);
/* … */
  __pyx_codeobj__106 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__72, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_set_up_data, 250, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__106)) __PYX_ERR(0, 250, __pyx_L1_error)
 0251:         """
 0252:         :meta private:
 0253:         """
+0254:         cdef view.array arr = None
  __Pyx_INCREF(Py_None);
  __pyx_v_arr = ((struct __pyx_array_obj *)Py_None);
+0255:         cdef cclm.mus_long_t size = cclm.mus_length(self._ptr)
  __pyx_v_size = mus_length(__pyx_v_self->_ptr);
+0256:         if size > 0:
  __pyx_t_6 = (__pyx_v_size > 0);
  if (__pyx_t_6) {
/* … */
    goto __pyx_L3;
  }
+0257:             self._data_ptr = cclm.mus_data(self._ptr)
    __pyx_v_self->_data_ptr = mus_data(__pyx_v_self->_ptr);
+0258:             arr = view.array(shape=(size,),itemsize=sizeof(double), format='d', allocate_buffer=False)
    __pyx_t_1 = __Pyx_PyDict_NewPresized(4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 258, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_2 = __Pyx_PyInt_From_mus_long_t(__pyx_v_size); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 258, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 258, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_GIVEREF(__pyx_t_2);
    PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_2);
    __pyx_t_2 = 0;
    if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_shape, __pyx_t_3) < 0) __PYX_ERR(0, 258, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_3 = __Pyx_PyInt_FromSize_t((sizeof(double))); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 258, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_itemsize, __pyx_t_3) < 0) __PYX_ERR(0, 258, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_format, __pyx_n_s_d) < 0) __PYX_ERR(0, 258, __pyx_L1_error)
    if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_allocate_buffer, Py_False) < 0) __PYX_ERR(0, 258, __pyx_L1_error)
    __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)__pyx_array_type), __pyx_empty_tuple, __pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 258, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_DECREF_SET(__pyx_v_arr, ((struct __pyx_array_obj *)__pyx_t_3));
    __pyx_t_3 = 0;
+0259:             arr.data = <char*>self._data_ptr
    __pyx_v_arr->data = ((char *)__pyx_v_self->_data_ptr);
+0260:             self._data = np.asarray(arr)
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 260, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_asarray); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 260, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_1 = NULL;
    __pyx_t_5 = 0;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
      __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_2);
      if (likely(__pyx_t_1)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
        __Pyx_INCREF(__pyx_t_1);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_2, function);
        __pyx_t_5 = 1;
      }
    }
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_1, ((PyObject *)__pyx_v_arr)};
      __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_5, 1+__pyx_t_5);
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 260, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    }
    if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 260, __pyx_L1_error)
    __Pyx_GIVEREF(__pyx_t_3);
    __Pyx_GOTREF((PyObject *)__pyx_v_self->_data);
    __Pyx_DECREF((PyObject *)__pyx_v_self->_data);
    __pyx_v_self->_data = ((PyArrayObject *)__pyx_t_3);
    __pyx_t_3 = 0;
 0261:         else:
+0262:             self._data = None
  /*else*/ {
    __Pyx_INCREF(Py_None);
    __Pyx_GIVEREF(Py_None);
    __Pyx_GOTREF((PyObject *)__pyx_v_self->_data);
    __Pyx_DECREF((PyObject *)__pyx_v_self->_data);
    __pyx_v_self->_data = ((PyArrayObject *)Py_None);
  }
  __pyx_L3:;
 0263: 
+0264:     cpdef set_up_xcoeffs(self):
static PyObject *__pyx_pw_8pysndlib_3clm_7mus_any_13set_up_xcoeffs(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyObject *__pyx_f_8pysndlib_3clm_7mus_any_set_up_xcoeffs(struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_self, int __pyx_skip_dispatch) {
  mus_long_t __pyx_v_size;
  struct __pyx_array_obj *__pyx_v_arr = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("set_up_xcoeffs", 0);
  /* Check if called by wrapper */
  if (unlikely(__pyx_skip_dispatch)) ;
  /* Check if overridden in Python */
  else if (unlikely((Py_TYPE(((PyObject *)__pyx_v_self))->tp_dictoffset != 0) || __Pyx_PyType_HasFeature(Py_TYPE(((PyObject *)__pyx_v_self)), (Py_TPFLAGS_IS_ABSTRACT | Py_TPFLAGS_HEAPTYPE)))) {
    #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
    static PY_UINT64_T __pyx_tp_dict_version = __PYX_DICT_VERSION_INIT, __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT;
    if (unlikely(!__Pyx_object_dict_version_matches(((PyObject *)__pyx_v_self), __pyx_tp_dict_version, __pyx_obj_dict_version))) {
      PY_UINT64_T __pyx_typedict_guard = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self));
      #endif
      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_set_up_xcoeffs); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 264, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      #ifdef __Pyx_CyFunction_USED
      if (!__Pyx_IsCyOrPyCFunction(__pyx_t_1)
      #else
      if (!PyCFunction_Check(__pyx_t_1)
      #endif
              || (PyCFunction_GET_FUNCTION(__pyx_t_1) != (PyCFunction)(void*)__pyx_pw_8pysndlib_3clm_7mus_any_13set_up_xcoeffs)) {
        __Pyx_XDECREF(__pyx_r);
        __Pyx_INCREF(__pyx_t_1);
        __pyx_t_3 = __pyx_t_1; __pyx_t_4 = NULL;
        __pyx_t_5 = 0;
        if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
          __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3);
          if (likely(__pyx_t_4)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
            __Pyx_INCREF(__pyx_t_4);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_3, function);
            __pyx_t_5 = 1;
          }
        }
        {
          PyObject *__pyx_callargs[1] = {__pyx_t_4, };
          __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_5, 0+__pyx_t_5);
          __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
          if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 264, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
        }
        __pyx_r = __pyx_t_2;
        __pyx_t_2 = 0;
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        goto __pyx_L0;
      }
      #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
      __pyx_tp_dict_version = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self));
      __pyx_obj_dict_version = __Pyx_get_object_dict_version(((PyObject *)__pyx_v_self));
      if (unlikely(__pyx_typedict_guard != __pyx_tp_dict_version)) {
        __pyx_tp_dict_version = __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT;
      }
      #endif
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
    }
    #endif
  }
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("pysndlib.clm.mus_any.set_up_xcoeffs", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_arr);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_7mus_any_13set_up_xcoeffs(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_7mus_any_12set_up_xcoeffs, "\n        :meta private:\n        ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_7mus_any_13set_up_xcoeffs = {"set_up_xcoeffs", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_7mus_any_13set_up_xcoeffs, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_7mus_any_12set_up_xcoeffs};
static PyObject *__pyx_pw_8pysndlib_3clm_7mus_any_13set_up_xcoeffs(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("set_up_xcoeffs (wrapper)", 0);
  if (unlikely(__pyx_nargs > 0)) {
    __Pyx_RaiseArgtupleInvalid("set_up_xcoeffs", 1, 0, 0, __pyx_nargs); return NULL;}
  if (unlikely(__pyx_kwds) && __Pyx_NumKwargs_FASTCALL(__pyx_kwds) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "set_up_xcoeffs", 0))) return NULL;
  __pyx_r = __pyx_pf_8pysndlib_3clm_7mus_any_12set_up_xcoeffs(((struct __pyx_obj_8pysndlib_3clm_mus_any *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_7mus_any_12set_up_xcoeffs(struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("set_up_xcoeffs", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_8pysndlib_3clm_7mus_any_set_up_xcoeffs(__pyx_v_self, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 264, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pysndlib.clm.mus_any.set_up_xcoeffs", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_40 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_7mus_any_13set_up_xcoeffs, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_mus_any_set_up_xcoeffs, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__107)); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 264, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  if (PyDict_SetItem((PyObject *)__pyx_ptype_8pysndlib_3clm_mus_any->tp_dict, __pyx_n_s_set_up_xcoeffs, __pyx_t_40) < 0) __PYX_ERR(0, 264, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
  PyType_Modified(__pyx_ptype_8pysndlib_3clm_mus_any);
/* … */
  __pyx_codeobj__107 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__72, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_set_up_xcoeffs, 264, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__107)) __PYX_ERR(0, 264, __pyx_L1_error)
 0265:         """
 0266:         :meta private:
 0267:         """
+0268:         cdef cclm.mus_long_t size = 0
  __pyx_v_size = 0;
+0269:         cdef view.array arr = None
  __Pyx_INCREF(Py_None);
  __pyx_v_arr = ((struct __pyx_array_obj *)Py_None);
 0270:         #if simple filter the size will always be 3 and we do not want to
 0271:         #allocate a buffer
 0272:         # in other cases mus_order will be size and we do want to allocate
 0273: 
+0274:         if is_simple_filter(self):
  __pyx_t_6 = __pyx_f_8pysndlib_3clm_is_simple_filter(__pyx_v_self); if (unlikely(__pyx_t_6 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 274, __pyx_L1_error)
  if (__pyx_t_6) {
/* … */
    goto __pyx_L3;
  }
+0275:             size = 3
    __pyx_v_size = 3;
+0276:             self._xcoeffs_ptr = cclm.mus_xcoeffs(self._ptr)
    __pyx_v_self->_xcoeffs_ptr = mus_xcoeffs(__pyx_v_self->_ptr);
+0277:             arr = view.array(shape=(size,),itemsize=sizeof(double), format='d', allocate_buffer=False)
    __pyx_t_1 = __Pyx_PyDict_NewPresized(4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 277, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_2 = __Pyx_PyInt_From_mus_long_t(__pyx_v_size); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 277, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 277, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_GIVEREF(__pyx_t_2);
    PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_2);
    __pyx_t_2 = 0;
    if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_shape, __pyx_t_3) < 0) __PYX_ERR(0, 277, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_3 = __Pyx_PyInt_FromSize_t((sizeof(double))); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 277, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_itemsize, __pyx_t_3) < 0) __PYX_ERR(0, 277, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_format, __pyx_n_s_d) < 0) __PYX_ERR(0, 277, __pyx_L1_error)
    if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_allocate_buffer, Py_False) < 0) __PYX_ERR(0, 277, __pyx_L1_error)
    __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)__pyx_array_type), __pyx_empty_tuple, __pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 277, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_DECREF_SET(__pyx_v_arr, ((struct __pyx_array_obj *)__pyx_t_3));
    __pyx_t_3 = 0;
+0278:             arr.data = <char*>self._xcoeffs_ptr
    __pyx_v_arr->data = ((char *)__pyx_v_self->_xcoeffs_ptr);
+0279:             self._xcoeffs = np.asarray(arr)
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 279, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_asarray); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 279, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_1 = NULL;
    __pyx_t_5 = 0;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
      __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_2);
      if (likely(__pyx_t_1)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
        __Pyx_INCREF(__pyx_t_1);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_2, function);
        __pyx_t_5 = 1;
      }
    }
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_1, ((PyObject *)__pyx_v_arr)};
      __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_5, 1+__pyx_t_5);
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 279, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    }
    if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 279, __pyx_L1_error)
    __Pyx_GIVEREF(__pyx_t_3);
    __Pyx_GOTREF((PyObject *)__pyx_v_self->_xcoeffs);
    __Pyx_DECREF((PyObject *)__pyx_v_self->_xcoeffs);
    __pyx_v_self->_xcoeffs = ((PyArrayObject *)__pyx_t_3);
    __pyx_t_3 = 0;
 0280:         else:
+0281:             size = cclm.mus_order(self._ptr)
  /*else*/ {
    __pyx_v_size = mus_order(__pyx_v_self->_ptr);
+0282:             self._xcoeffs_ptr = cclm.mus_xcoeffs(self._ptr)
    __pyx_v_self->_xcoeffs_ptr = mus_xcoeffs(__pyx_v_self->_ptr);
+0283:             arr = view.array(shape=(size,),itemsize=sizeof(double), format='d', allocate_buffer=True)
    __pyx_t_3 = __Pyx_PyDict_NewPresized(4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 283, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_2 = __Pyx_PyInt_From_mus_long_t(__pyx_v_size); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 283, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 283, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_GIVEREF(__pyx_t_2);
    PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_2);
    __pyx_t_2 = 0;
    if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_shape, __pyx_t_1) < 0) __PYX_ERR(0, 283, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_1 = __Pyx_PyInt_FromSize_t((sizeof(double))); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 283, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_itemsize, __pyx_t_1) < 0) __PYX_ERR(0, 283, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_format, __pyx_n_s_d) < 0) __PYX_ERR(0, 283, __pyx_L1_error)
    if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_allocate_buffer, Py_True) < 0) __PYX_ERR(0, 283, __pyx_L1_error)
    __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_array_type), __pyx_empty_tuple, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 283, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF_SET(__pyx_v_arr, ((struct __pyx_array_obj *)__pyx_t_1));
    __pyx_t_1 = 0;
+0284:             arr.data = <char*>self._xcoeffs_ptr
    __pyx_v_arr->data = ((char *)__pyx_v_self->_xcoeffs_ptr);
+0285:             self._xcoeffs = np.asarray(arr)
    __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 285, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_asarray); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 285, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_3 = NULL;
    __pyx_t_5 = 0;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
      __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
      if (likely(__pyx_t_3)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
        __Pyx_INCREF(__pyx_t_3);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_2, function);
        __pyx_t_5 = 1;
      }
    }
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_3, ((PyObject *)__pyx_v_arr)};
      __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_5, 1+__pyx_t_5);
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 285, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    }
    if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 285, __pyx_L1_error)
    __Pyx_GIVEREF(__pyx_t_1);
    __Pyx_GOTREF((PyObject *)__pyx_v_self->_xcoeffs);
    __Pyx_DECREF((PyObject *)__pyx_v_self->_xcoeffs);
    __pyx_v_self->_xcoeffs = ((PyArrayObject *)__pyx_t_1);
    __pyx_t_1 = 0;
  }
  __pyx_L3:;
 0286: 
+0287:     cpdef set_up_ycoeffs(self):
static PyObject *__pyx_pw_8pysndlib_3clm_7mus_any_15set_up_ycoeffs(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyObject *__pyx_f_8pysndlib_3clm_7mus_any_set_up_ycoeffs(struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_self, int __pyx_skip_dispatch) {
  mus_long_t __pyx_v_size;
  struct __pyx_array_obj *__pyx_v_arr = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("set_up_ycoeffs", 0);
  /* Check if called by wrapper */
  if (unlikely(__pyx_skip_dispatch)) ;
  /* Check if overridden in Python */
  else if (unlikely((Py_TYPE(((PyObject *)__pyx_v_self))->tp_dictoffset != 0) || __Pyx_PyType_HasFeature(Py_TYPE(((PyObject *)__pyx_v_self)), (Py_TPFLAGS_IS_ABSTRACT | Py_TPFLAGS_HEAPTYPE)))) {
    #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
    static PY_UINT64_T __pyx_tp_dict_version = __PYX_DICT_VERSION_INIT, __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT;
    if (unlikely(!__Pyx_object_dict_version_matches(((PyObject *)__pyx_v_self), __pyx_tp_dict_version, __pyx_obj_dict_version))) {
      PY_UINT64_T __pyx_typedict_guard = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self));
      #endif
      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_set_up_ycoeffs); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 287, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      #ifdef __Pyx_CyFunction_USED
      if (!__Pyx_IsCyOrPyCFunction(__pyx_t_1)
      #else
      if (!PyCFunction_Check(__pyx_t_1)
      #endif
              || (PyCFunction_GET_FUNCTION(__pyx_t_1) != (PyCFunction)(void*)__pyx_pw_8pysndlib_3clm_7mus_any_15set_up_ycoeffs)) {
        __Pyx_XDECREF(__pyx_r);
        __Pyx_INCREF(__pyx_t_1);
        __pyx_t_3 = __pyx_t_1; __pyx_t_4 = NULL;
        __pyx_t_5 = 0;
        if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
          __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3);
          if (likely(__pyx_t_4)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
            __Pyx_INCREF(__pyx_t_4);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_3, function);
            __pyx_t_5 = 1;
          }
        }
        {
          PyObject *__pyx_callargs[1] = {__pyx_t_4, };
          __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_5, 0+__pyx_t_5);
          __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
          if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 287, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
        }
        __pyx_r = __pyx_t_2;
        __pyx_t_2 = 0;
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        goto __pyx_L0;
      }
      #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
      __pyx_tp_dict_version = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self));
      __pyx_obj_dict_version = __Pyx_get_object_dict_version(((PyObject *)__pyx_v_self));
      if (unlikely(__pyx_typedict_guard != __pyx_tp_dict_version)) {
        __pyx_tp_dict_version = __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT;
      }
      #endif
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
    }
    #endif
  }
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("pysndlib.clm.mus_any.set_up_ycoeffs", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_arr);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_7mus_any_15set_up_ycoeffs(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_7mus_any_14set_up_ycoeffs, "\n        :meta private:\n        ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_7mus_any_15set_up_ycoeffs = {"set_up_ycoeffs", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_7mus_any_15set_up_ycoeffs, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_7mus_any_14set_up_ycoeffs};
static PyObject *__pyx_pw_8pysndlib_3clm_7mus_any_15set_up_ycoeffs(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("set_up_ycoeffs (wrapper)", 0);
  if (unlikely(__pyx_nargs > 0)) {
    __Pyx_RaiseArgtupleInvalid("set_up_ycoeffs", 1, 0, 0, __pyx_nargs); return NULL;}
  if (unlikely(__pyx_kwds) && __Pyx_NumKwargs_FASTCALL(__pyx_kwds) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "set_up_ycoeffs", 0))) return NULL;
  __pyx_r = __pyx_pf_8pysndlib_3clm_7mus_any_14set_up_ycoeffs(((struct __pyx_obj_8pysndlib_3clm_mus_any *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_7mus_any_14set_up_ycoeffs(struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("set_up_ycoeffs", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_8pysndlib_3clm_7mus_any_set_up_ycoeffs(__pyx_v_self, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 287, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pysndlib.clm.mus_any.set_up_ycoeffs", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_40 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_7mus_any_15set_up_ycoeffs, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_mus_any_set_up_ycoeffs, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__108)); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 287, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  if (PyDict_SetItem((PyObject *)__pyx_ptype_8pysndlib_3clm_mus_any->tp_dict, __pyx_n_s_set_up_ycoeffs, __pyx_t_40) < 0) __PYX_ERR(0, 287, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
  PyType_Modified(__pyx_ptype_8pysndlib_3clm_mus_any);
/* … */
  __pyx_codeobj__108 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__72, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_set_up_ycoeffs, 287, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__108)) __PYX_ERR(0, 287, __pyx_L1_error)
 0288:         """
 0289:         :meta private:
 0290:         """
+0291:         cdef cclm.mus_long_t size = 0
  __pyx_v_size = 0;
+0292:         cdef view.array arr = None
  __Pyx_INCREF(Py_None);
  __pyx_v_arr = ((struct __pyx_array_obj *)Py_None);
 0293:         #if simple filter the size will always be 3 and we do not want to
 0294:         #allocate a buffer
 0295:         # in other cases mus_order will be size and we do want to allocate
 0296: 
+0297:         if is_simple_filter(self):
  __pyx_t_6 = __pyx_f_8pysndlib_3clm_is_simple_filter(__pyx_v_self); if (unlikely(__pyx_t_6 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 297, __pyx_L1_error)
  if (__pyx_t_6) {
/* … */
    goto __pyx_L3;
  }
+0298:             size = 3
    __pyx_v_size = 3;
+0299:             self._xcoeffs_ptr = cclm.mus_xcoeffs(self._ptr)
    __pyx_v_self->_xcoeffs_ptr = mus_xcoeffs(__pyx_v_self->_ptr);
+0300:             arr = view.array(shape=(size,),itemsize=sizeof(double), format='d', allocate_buffer=False)
    __pyx_t_1 = __Pyx_PyDict_NewPresized(4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 300, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_2 = __Pyx_PyInt_From_mus_long_t(__pyx_v_size); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 300, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 300, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_GIVEREF(__pyx_t_2);
    PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_2);
    __pyx_t_2 = 0;
    if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_shape, __pyx_t_3) < 0) __PYX_ERR(0, 300, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_3 = __Pyx_PyInt_FromSize_t((sizeof(double))); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 300, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_itemsize, __pyx_t_3) < 0) __PYX_ERR(0, 300, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_format, __pyx_n_s_d) < 0) __PYX_ERR(0, 300, __pyx_L1_error)
    if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_allocate_buffer, Py_False) < 0) __PYX_ERR(0, 300, __pyx_L1_error)
    __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)__pyx_array_type), __pyx_empty_tuple, __pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 300, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_DECREF_SET(__pyx_v_arr, ((struct __pyx_array_obj *)__pyx_t_3));
    __pyx_t_3 = 0;
+0301:             arr.data = <char*>self._ycoeffs_ptr
    __pyx_v_arr->data = ((char *)__pyx_v_self->_ycoeffs_ptr);
+0302:             self._xcoeffs = np.asarray(arr)
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 302, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_asarray); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 302, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_1 = NULL;
    __pyx_t_5 = 0;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
      __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_2);
      if (likely(__pyx_t_1)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
        __Pyx_INCREF(__pyx_t_1);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_2, function);
        __pyx_t_5 = 1;
      }
    }
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_1, ((PyObject *)__pyx_v_arr)};
      __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_5, 1+__pyx_t_5);
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 302, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    }
    if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 302, __pyx_L1_error)
    __Pyx_GIVEREF(__pyx_t_3);
    __Pyx_GOTREF((PyObject *)__pyx_v_self->_xcoeffs);
    __Pyx_DECREF((PyObject *)__pyx_v_self->_xcoeffs);
    __pyx_v_self->_xcoeffs = ((PyArrayObject *)__pyx_t_3);
    __pyx_t_3 = 0;
 0303:         else:
+0304:             size = cclm.mus_order(self._ptr)
  /*else*/ {
    __pyx_v_size = mus_order(__pyx_v_self->_ptr);
+0305:             self._xcoeffs_ptr = cclm.mus_xcoeffs(self._ptr)
    __pyx_v_self->_xcoeffs_ptr = mus_xcoeffs(__pyx_v_self->_ptr);
+0306:             arr = view.array(shape=(size,),itemsize=sizeof(double), format='d', allocate_buffer=True)
    __pyx_t_3 = __Pyx_PyDict_NewPresized(4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 306, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_2 = __Pyx_PyInt_From_mus_long_t(__pyx_v_size); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 306, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 306, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_GIVEREF(__pyx_t_2);
    PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_2);
    __pyx_t_2 = 0;
    if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_shape, __pyx_t_1) < 0) __PYX_ERR(0, 306, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_1 = __Pyx_PyInt_FromSize_t((sizeof(double))); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 306, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_itemsize, __pyx_t_1) < 0) __PYX_ERR(0, 306, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_format, __pyx_n_s_d) < 0) __PYX_ERR(0, 306, __pyx_L1_error)
    if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_allocate_buffer, Py_True) < 0) __PYX_ERR(0, 306, __pyx_L1_error)
    __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_array_type), __pyx_empty_tuple, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 306, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF_SET(__pyx_v_arr, ((struct __pyx_array_obj *)__pyx_t_1));
    __pyx_t_1 = 0;
+0307:             arr.data = <char*>self._ycoeffs_ptr
    __pyx_v_arr->data = ((char *)__pyx_v_self->_ycoeffs_ptr);
+0308:             self._xcoeffs = np.asarray(arr)
    __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 308, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_asarray); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 308, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_3 = NULL;
    __pyx_t_5 = 0;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
      __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
      if (likely(__pyx_t_3)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
        __Pyx_INCREF(__pyx_t_3);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_2, function);
        __pyx_t_5 = 1;
      }
    }
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_3, ((PyObject *)__pyx_v_arr)};
      __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_5, 1+__pyx_t_5);
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 308, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    }
    if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 308, __pyx_L1_error)
    __Pyx_GIVEREF(__pyx_t_1);
    __Pyx_GOTREF((PyObject *)__pyx_v_self->_xcoeffs);
    __Pyx_DECREF((PyObject *)__pyx_v_self->_xcoeffs);
    __pyx_v_self->_xcoeffs = ((PyArrayObject *)__pyx_t_1);
    __pyx_t_1 = 0;
  }
  __pyx_L3:;
 0309: 
 0310: 
+0311:     cpdef set_up_pv_data(self):
static PyObject *__pyx_pw_8pysndlib_3clm_7mus_any_17set_up_pv_data(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyObject *__pyx_f_8pysndlib_3clm_7mus_any_set_up_pv_data(struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_self, int __pyx_skip_dispatch) {
  mus_long_t __pyx_v_size;
  struct __pyx_array_obj *__pyx_v_pvai = 0;
  struct __pyx_array_obj *__pyx_v_pva = 0;
  struct __pyx_array_obj *__pyx_v_pvf = 0;
  struct __pyx_array_obj *__pyx_v_pvp = 0;
  struct __pyx_array_obj *__pyx_v_pvpi = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("set_up_pv_data", 0);
  /* Check if called by wrapper */
  if (unlikely(__pyx_skip_dispatch)) ;
  /* Check if overridden in Python */
  else if (unlikely((Py_TYPE(((PyObject *)__pyx_v_self))->tp_dictoffset != 0) || __Pyx_PyType_HasFeature(Py_TYPE(((PyObject *)__pyx_v_self)), (Py_TPFLAGS_IS_ABSTRACT | Py_TPFLAGS_HEAPTYPE)))) {
    #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
    static PY_UINT64_T __pyx_tp_dict_version = __PYX_DICT_VERSION_INIT, __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT;
    if (unlikely(!__Pyx_object_dict_version_matches(((PyObject *)__pyx_v_self), __pyx_tp_dict_version, __pyx_obj_dict_version))) {
      PY_UINT64_T __pyx_typedict_guard = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self));
      #endif
      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_set_up_pv_data); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 311, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      #ifdef __Pyx_CyFunction_USED
      if (!__Pyx_IsCyOrPyCFunction(__pyx_t_1)
      #else
      if (!PyCFunction_Check(__pyx_t_1)
      #endif
              || (PyCFunction_GET_FUNCTION(__pyx_t_1) != (PyCFunction)(void*)__pyx_pw_8pysndlib_3clm_7mus_any_17set_up_pv_data)) {
        __Pyx_XDECREF(__pyx_r);
        __Pyx_INCREF(__pyx_t_1);
        __pyx_t_3 = __pyx_t_1; __pyx_t_4 = NULL;
        __pyx_t_5 = 0;
        if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
          __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3);
          if (likely(__pyx_t_4)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
            __Pyx_INCREF(__pyx_t_4);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_3, function);
            __pyx_t_5 = 1;
          }
        }
        {
          PyObject *__pyx_callargs[1] = {__pyx_t_4, };
          __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_5, 0+__pyx_t_5);
          __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
          if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 311, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
        }
        __pyx_r = __pyx_t_2;
        __pyx_t_2 = 0;
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        goto __pyx_L0;
      }
      #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
      __pyx_tp_dict_version = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self));
      __pyx_obj_dict_version = __Pyx_get_object_dict_version(((PyObject *)__pyx_v_self));
      if (unlikely(__pyx_typedict_guard != __pyx_tp_dict_version)) {
        __pyx_tp_dict_version = __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT;
      }
      #endif
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
    }
    #endif
  }
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("pysndlib.clm.mus_any.set_up_pv_data", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_pvai);
  __Pyx_XDECREF((PyObject *)__pyx_v_pva);
  __Pyx_XDECREF((PyObject *)__pyx_v_pvf);
  __Pyx_XDECREF((PyObject *)__pyx_v_pvp);
  __Pyx_XDECREF((PyObject *)__pyx_v_pvpi);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_7mus_any_17set_up_pv_data(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_7mus_any_16set_up_pv_data, "\n        :meta private:\n        ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_7mus_any_17set_up_pv_data = {"set_up_pv_data", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_7mus_any_17set_up_pv_data, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_7mus_any_16set_up_pv_data};
static PyObject *__pyx_pw_8pysndlib_3clm_7mus_any_17set_up_pv_data(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("set_up_pv_data (wrapper)", 0);
  if (unlikely(__pyx_nargs > 0)) {
    __Pyx_RaiseArgtupleInvalid("set_up_pv_data", 1, 0, 0, __pyx_nargs); return NULL;}
  if (unlikely(__pyx_kwds) && __Pyx_NumKwargs_FASTCALL(__pyx_kwds) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "set_up_pv_data", 0))) return NULL;
  __pyx_r = __pyx_pf_8pysndlib_3clm_7mus_any_16set_up_pv_data(((struct __pyx_obj_8pysndlib_3clm_mus_any *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_7mus_any_16set_up_pv_data(struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("set_up_pv_data", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_8pysndlib_3clm_7mus_any_set_up_pv_data(__pyx_v_self, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 311, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pysndlib.clm.mus_any.set_up_pv_data", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_40 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_7mus_any_17set_up_pv_data, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_mus_any_set_up_pv_data, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__109)); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 311, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  if (PyDict_SetItem((PyObject *)__pyx_ptype_8pysndlib_3clm_mus_any->tp_dict, __pyx_n_s_set_up_pv_data, __pyx_t_40) < 0) __PYX_ERR(0, 311, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
  PyType_Modified(__pyx_ptype_8pysndlib_3clm_mus_any);
/* … */
  __pyx_codeobj__109 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__72, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_set_up_pv_data, 311, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__109)) __PYX_ERR(0, 311, __pyx_L1_error)
 0312:         """
 0313:         :meta private:
 0314:         """
+0315:         cdef cclm.mus_long_t size = cclm.mus_length(self._ptr)
  __pyx_v_size = mus_length(__pyx_v_self->_ptr);
 0316: 
+0317:         self._pv_amp_increments_ptr = cclm.mus_phase_vocoder_amp_increments(self._ptr)
  __pyx_v_self->_pv_amp_increments_ptr = mus_phase_vocoder_amp_increments(__pyx_v_self->_ptr);
+0318:         cdef view.array pvai = view.array(shape=(size,),itemsize=sizeof(double), format='d', allocate_buffer=True)
  __pyx_t_1 = __Pyx_PyDict_NewPresized(4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 318, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyInt_From_mus_long_t(__pyx_v_size); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 318, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 318, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_2);
  __pyx_t_2 = 0;
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_shape, __pyx_t_3) < 0) __PYX_ERR(0, 318, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_PyInt_FromSize_t((sizeof(double))); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 318, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_itemsize, __pyx_t_3) < 0) __PYX_ERR(0, 318, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_format, __pyx_n_s_d) < 0) __PYX_ERR(0, 318, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_allocate_buffer, Py_True) < 0) __PYX_ERR(0, 318, __pyx_L1_error)
  __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)__pyx_array_type), __pyx_empty_tuple, __pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 318, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_pvai = ((struct __pyx_array_obj *)__pyx_t_3);
  __pyx_t_3 = 0;
+0319:         pvai.data = <char*>self._pv_amp_increments_ptr
  __pyx_v_pvai->data = ((char *)__pyx_v_self->_pv_amp_increments_ptr);
+0320:         self._pv_amp_increments = np.asarray(pvai)
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 320, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_asarray); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 320, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = NULL;
  __pyx_t_5 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_1)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_1);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
      __pyx_t_5 = 1;
    }
  }
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_1, ((PyObject *)__pyx_v_pvai)};
    __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_5, 1+__pyx_t_5);
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 320, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  }
  if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 320, __pyx_L1_error)
  __Pyx_GIVEREF(__pyx_t_3);
  __Pyx_GOTREF((PyObject *)__pyx_v_self->_pv_amp_increments);
  __Pyx_DECREF((PyObject *)__pyx_v_self->_pv_amp_increments);
  __pyx_v_self->_pv_amp_increments = ((PyArrayObject *)__pyx_t_3);
  __pyx_t_3 = 0;
+0321:         self._pv_amp_increments.fill(0.0)
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->_pv_amp_increments), __pyx_n_s_fill); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 321, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_1 = NULL;
  __pyx_t_5 = 0;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_1)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_1);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
      __pyx_t_5 = 1;
    }
  }
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_1, __pyx_float_0_0};
    __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_5, 1+__pyx_t_5);
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 321, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  }
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 0322: 
+0323:         self._pv_amps_ptr = cclm.mus_phase_vocoder_amps(self._ptr)
  __pyx_v_self->_pv_amps_ptr = mus_phase_vocoder_amps(__pyx_v_self->_ptr);
+0324:         cdef view.array pva = view.array(shape=(size // 2,),itemsize=sizeof(double), format='d', allocate_buffer=True)
  __pyx_t_3 = __Pyx_PyDict_NewPresized(4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 324, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_2 = __Pyx_PyInt_From_mus_long_t(__Pyx_div_mus_long_t(__pyx_v_size, 2)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 324, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 324, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_2);
  __pyx_t_2 = 0;
  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_shape, __pyx_t_1) < 0) __PYX_ERR(0, 324, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyInt_FromSize_t((sizeof(double))); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 324, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_itemsize, __pyx_t_1) < 0) __PYX_ERR(0, 324, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_format, __pyx_n_s_d) < 0) __PYX_ERR(0, 324, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_allocate_buffer, Py_True) < 0) __PYX_ERR(0, 324, __pyx_L1_error)
  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_array_type), __pyx_empty_tuple, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 324, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_v_pva = ((struct __pyx_array_obj *)__pyx_t_1);
  __pyx_t_1 = 0;
+0325:         pva.data = <char*>self._pv_amps_ptr
  __pyx_v_pva->data = ((char *)__pyx_v_self->_pv_amps_ptr);
+0326:         self._pv_amps = np.asarray(pva)
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 326, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_asarray); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 326, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = NULL;
  __pyx_t_5 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
      __pyx_t_5 = 1;
    }
  }
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_3, ((PyObject *)__pyx_v_pva)};
    __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_5, 1+__pyx_t_5);
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 326, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  }
  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 326, __pyx_L1_error)
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF((PyObject *)__pyx_v_self->_pv_amps);
  __Pyx_DECREF((PyObject *)__pyx_v_self->_pv_amps);
  __pyx_v_self->_pv_amps = ((PyArrayObject *)__pyx_t_1);
  __pyx_t_1 = 0;
+0327:         self._pv_amps.fill(0.0)
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->_pv_amps), __pyx_n_s_fill); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 327, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  __pyx_t_5 = 0;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
      __pyx_t_5 = 1;
    }
  }
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_float_0_0};
    __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_5, 1+__pyx_t_5);
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 327, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 0328: 
+0329:         self._pv_freqs_ptr = cclm.mus_phase_vocoder_freqs(self._ptr)
  __pyx_v_self->_pv_freqs_ptr = mus_phase_vocoder_freqs(__pyx_v_self->_ptr);
+0330:         cdef view.array pvf = view.array(shape=(size,),itemsize=sizeof(double), format='d', allocate_buffer=True)
  __pyx_t_1 = __Pyx_PyDict_NewPresized(4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 330, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyInt_From_mus_long_t(__pyx_v_size); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 330, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 330, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_2);
  __pyx_t_2 = 0;
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_shape, __pyx_t_3) < 0) __PYX_ERR(0, 330, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_PyInt_FromSize_t((sizeof(double))); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 330, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_itemsize, __pyx_t_3) < 0) __PYX_ERR(0, 330, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_format, __pyx_n_s_d) < 0) __PYX_ERR(0, 330, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_allocate_buffer, Py_True) < 0) __PYX_ERR(0, 330, __pyx_L1_error)
  __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)__pyx_array_type), __pyx_empty_tuple, __pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 330, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_pvf = ((struct __pyx_array_obj *)__pyx_t_3);
  __pyx_t_3 = 0;
+0331:         pvf.data = <char*>self._pv_freqs_ptr
  __pyx_v_pvf->data = ((char *)__pyx_v_self->_pv_freqs_ptr);
+0332:         self._pv_freqs = np.asarray(pvf)
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 332, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_asarray); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 332, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = NULL;
  __pyx_t_5 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_1)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_1);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
      __pyx_t_5 = 1;
    }
  }
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_1, ((PyObject *)__pyx_v_pvf)};
    __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_5, 1+__pyx_t_5);
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 332, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  }
  if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 332, __pyx_L1_error)
  __Pyx_GIVEREF(__pyx_t_3);
  __Pyx_GOTREF((PyObject *)__pyx_v_self->_pv_freqs);
  __Pyx_DECREF((PyObject *)__pyx_v_self->_pv_freqs);
  __pyx_v_self->_pv_freqs = ((PyArrayObject *)__pyx_t_3);
  __pyx_t_3 = 0;
+0333:         self._pv_freqs.fill(0.0)
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->_pv_freqs), __pyx_n_s_fill); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 333, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_1 = NULL;
  __pyx_t_5 = 0;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_1)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_1);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
      __pyx_t_5 = 1;
    }
  }
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_1, __pyx_float_0_0};
    __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_5, 1+__pyx_t_5);
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 333, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  }
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 0334: 
+0335:         self._pv_phases_ptr = cclm.mus_phase_vocoder_phases(self._ptr)
  __pyx_v_self->_pv_phases_ptr = mus_phase_vocoder_phases(__pyx_v_self->_ptr);
+0336:         cdef view.array pvp = view.array(shape=(size // 2,),itemsize=sizeof(double), format='d', allocate_buffer=True)
  __pyx_t_3 = __Pyx_PyDict_NewPresized(4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 336, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_2 = __Pyx_PyInt_From_mus_long_t(__Pyx_div_mus_long_t(__pyx_v_size, 2)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 336, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 336, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_2);
  __pyx_t_2 = 0;
  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_shape, __pyx_t_1) < 0) __PYX_ERR(0, 336, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyInt_FromSize_t((sizeof(double))); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 336, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_itemsize, __pyx_t_1) < 0) __PYX_ERR(0, 336, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_format, __pyx_n_s_d) < 0) __PYX_ERR(0, 336, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_allocate_buffer, Py_True) < 0) __PYX_ERR(0, 336, __pyx_L1_error)
  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_array_type), __pyx_empty_tuple, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 336, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_v_pvp = ((struct __pyx_array_obj *)__pyx_t_1);
  __pyx_t_1 = 0;
+0337:         pvp.data = <char*>self._pv_phases_ptr
  __pyx_v_pvp->data = ((char *)__pyx_v_self->_pv_phases_ptr);
+0338:         self._pv_phases = np.asarray(pvp)
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 338, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_asarray); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 338, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = NULL;
  __pyx_t_5 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
      __pyx_t_5 = 1;
    }
  }
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_3, ((PyObject *)__pyx_v_pvp)};
    __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_5, 1+__pyx_t_5);
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 338, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  }
  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 338, __pyx_L1_error)
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF((PyObject *)__pyx_v_self->_pv_phases);
  __Pyx_DECREF((PyObject *)__pyx_v_self->_pv_phases);
  __pyx_v_self->_pv_phases = ((PyArrayObject *)__pyx_t_1);
  __pyx_t_1 = 0;
+0339:         self._pv_phases.fill(0.0)
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->_pv_phases), __pyx_n_s_fill); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 339, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  __pyx_t_5 = 0;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
      __pyx_t_5 = 1;
    }
  }
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_float_0_0};
    __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_5, 1+__pyx_t_5);
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 339, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 0340: 
+0341:         self._pv_phase_increments_ptr = cclm.mus_phase_vocoder_phase_increments(self._ptr)
  __pyx_v_self->_pv_phase_increments_ptr = mus_phase_vocoder_phase_increments(__pyx_v_self->_ptr);
+0342:         cdef view.array pvpi = view.array(shape=(size // 2,),itemsize=sizeof(double), format='d', allocate_buffer=True)
  __pyx_t_1 = __Pyx_PyDict_NewPresized(4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 342, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyInt_From_mus_long_t(__Pyx_div_mus_long_t(__pyx_v_size, 2)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 342, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 342, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_2);
  __pyx_t_2 = 0;
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_shape, __pyx_t_3) < 0) __PYX_ERR(0, 342, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_PyInt_FromSize_t((sizeof(double))); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 342, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_itemsize, __pyx_t_3) < 0) __PYX_ERR(0, 342, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_format, __pyx_n_s_d) < 0) __PYX_ERR(0, 342, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_allocate_buffer, Py_True) < 0) __PYX_ERR(0, 342, __pyx_L1_error)
  __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)__pyx_array_type), __pyx_empty_tuple, __pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 342, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_pvpi = ((struct __pyx_array_obj *)__pyx_t_3);
  __pyx_t_3 = 0;
+0343:         pvpi.data = <char*>self._pv_phase_increments_ptr
  __pyx_v_pvpi->data = ((char *)__pyx_v_self->_pv_phase_increments_ptr);
+0344:         self._pv_phase_increments = np.asarray(pvpi)
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 344, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_asarray); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 344, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = NULL;
  __pyx_t_5 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_1)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_1);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
      __pyx_t_5 = 1;
    }
  }
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_1, ((PyObject *)__pyx_v_pvpi)};
    __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_5, 1+__pyx_t_5);
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 344, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  }
  if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 344, __pyx_L1_error)
  __Pyx_GIVEREF(__pyx_t_3);
  __Pyx_GOTREF((PyObject *)__pyx_v_self->_pv_phase_increments);
  __Pyx_DECREF((PyObject *)__pyx_v_self->_pv_phase_increments);
  __pyx_v_self->_pv_phase_increments = ((PyArrayObject *)__pyx_t_3);
  __pyx_t_3 = 0;
+0345:         self._pv_phase_increments.fill(0.0)
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->_pv_phase_increments), __pyx_n_s_fill); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 345, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_1 = NULL;
  __pyx_t_5 = 0;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_1)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_1);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
      __pyx_t_5 = 1;
    }
  }
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_1, __pyx_float_0_0};
    __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_5, 1+__pyx_t_5);
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 345, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  }
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 0346: 
+0347:     def __call__(self, arg1=0.0, arg2=0.0):
/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_7mus_any_19__call__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyObject *__pyx_pw_8pysndlib_3clm_7mus_any_19__call__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_arg1 = 0;
  PyObject *__pyx_v_arg2 = 0;
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__call__ (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_arg1,&__pyx_n_s_arg2,0};
    PyObject* values[2] = {0,0};
    values[0] = ((PyObject *)__pyx_float_0_0);
    values[1] = ((PyObject *)__pyx_float_0_0);
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  2: values[1] = __Pyx_Arg_VARARGS(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_VARARGS(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_VARARGS(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_arg1);
          if (value) { values[0] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 347, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_arg2);
          if (value) { values[1] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 347, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "__call__") < 0)) __PYX_ERR(0, 347, __pyx_L3_error)
      }
    } else {
      switch (__pyx_nargs) {
        case  2: values[1] = __Pyx_Arg_VARARGS(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_VARARGS(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_arg1 = values[0];
    __pyx_v_arg2 = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__call__", 0, 0, 2, __pyx_nargs); __PYX_ERR(0, 347, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.mus_any.__call__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pysndlib_3clm_7mus_any_18__call__(((struct __pyx_obj_8pysndlib_3clm_mus_any *)__pyx_v_self), __pyx_v_arg1, __pyx_v_arg2);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_7mus_any_18__call__(struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_self, PyObject *__pyx_v_arg1, PyObject *__pyx_v_arg2) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__call__", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("pysndlib.clm.mus_any.__call__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+0348:         return cclm.mus_apply(self._ptr, arg1,arg2)
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_PyFloat_AsDouble(__pyx_v_arg1); if (unlikely((__pyx_t_1 == ((mus_float_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 348, __pyx_L1_error)
  __pyx_t_2 = __pyx_PyFloat_AsDouble(__pyx_v_arg2); if (unlikely((__pyx_t_2 == ((mus_float_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 348, __pyx_L1_error)
  __pyx_t_3 = PyFloat_FromDouble(mus_apply(__pyx_v_self->_ptr, __pyx_t_1, __pyx_t_2)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 348, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_r = __pyx_t_3;
  __pyx_t_3 = 0;
  goto __pyx_L0;
 0349: 
+0350:     def __str__(self):
/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_7mus_any_21__str__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_8pysndlib_3clm_7mus_any_21__str__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__str__ (wrapper)", 0);
  __pyx_r = __pyx_pf_8pysndlib_3clm_7mus_any_20__str__(((struct __pyx_obj_8pysndlib_3clm_mus_any *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_7mus_any_20__str__(struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__str__", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("pysndlib.clm.mus_any.__str__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+0351:         return f'{mus_any} {cclm.mus_describe(self._ptr)}'
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 351, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = 0;
  __pyx_t_3 = 127;
  __pyx_t_4 = __Pyx_PyObject_FormatSimple(((PyObject *)__pyx_ptype_8pysndlib_3clm_mus_any), __pyx_empty_unicode); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 351, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_3 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_4) > __pyx_t_3) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_4) : __pyx_t_3;
  __pyx_t_2 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_4);
  __Pyx_GIVEREF(__pyx_t_4);
  PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_4);
  __pyx_t_4 = 0;
  __Pyx_INCREF(__pyx_kp_u__17);
  __pyx_t_2 += 1;
  __Pyx_GIVEREF(__pyx_kp_u__17);
  PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_kp_u__17);
  __pyx_t_4 = __Pyx_PyUnicode_FromString(mus_describe(__pyx_v_self->_ptr)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 351, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_3 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_4) > __pyx_t_3) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_4) : __pyx_t_3;
  __pyx_t_2 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_4);
  __Pyx_GIVEREF(__pyx_t_4);
  PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_t_4);
  __pyx_t_4 = 0;
  __pyx_t_4 = __Pyx_PyUnicode_Join(__pyx_t_1, 3, __pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 351, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_r = __pyx_t_4;
  __pyx_t_4 = 0;
  goto __pyx_L0;
 0352: 
 0353: 
+0354:     @property
/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_7mus_any_13mus_frequency_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_8pysndlib_3clm_7mus_any_13mus_frequency_1__get__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_8pysndlib_3clm_7mus_any_13mus_frequency___get__(((struct __pyx_obj_8pysndlib_3clm_mus_any *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_7mus_any_13mus_frequency___get__(struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pysndlib.clm.mus_any.mus_frequency.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 0355:     def mus_frequency(self):
 0356:         """
 0357:         frequency (hz), float
 0358:         """
+0359:         return cclm.mus_frequency(self._ptr)
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = PyFloat_FromDouble(mus_frequency(__pyx_v_self->_ptr)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 359, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 0360: 
+0361:     @mus_frequency.setter
/* Python wrapper */
static int __pyx_pw_8pysndlib_3clm_7mus_any_13mus_frequency_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_v); /*proto*/
static int __pyx_pw_8pysndlib_3clm_7mus_any_13mus_frequency_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_v) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
  __pyx_r = __pyx_pf_8pysndlib_3clm_7mus_any_13mus_frequency_2__set__(((struct __pyx_obj_8pysndlib_3clm_mus_any *)__pyx_v_self), ((PyObject *)__pyx_v_v));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_8pysndlib_3clm_7mus_any_13mus_frequency_2__set__(struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_self, PyObject *__pyx_v_v) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__set__", 0);
/* … */
  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("pysndlib.clm.mus_any.mus_frequency.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 0362:     def mus_frequency(self, v):
+0363:         cclm.mus_set_frequency(self._ptr, v)
  __pyx_t_1 = __pyx_PyFloat_AsDouble(__pyx_v_v); if (unlikely((__pyx_t_1 == ((mus_float_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 363, __pyx_L1_error)
  (void)(mus_set_frequency(__pyx_v_self->_ptr, __pyx_t_1));
 0364: 
+0365:     @property
/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_7mus_any_9mus_phase_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_8pysndlib_3clm_7mus_any_9mus_phase_1__get__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_8pysndlib_3clm_7mus_any_9mus_phase___get__(((struct __pyx_obj_8pysndlib_3clm_mus_any *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_7mus_any_9mus_phase___get__(struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pysndlib.clm.mus_any.mus_phase.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 0366:     def mus_phase(self):
 0367:         """
 0368:         phase (radians), float
 0369:         """
+0370:         return cclm.mus_phase(self._ptr)
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = PyFloat_FromDouble(mus_phase(__pyx_v_self->_ptr)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 370, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 0371: 
+0372:     @mus_phase.setter
/* Python wrapper */
static int __pyx_pw_8pysndlib_3clm_7mus_any_9mus_phase_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_v); /*proto*/
static int __pyx_pw_8pysndlib_3clm_7mus_any_9mus_phase_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_v) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
  __pyx_r = __pyx_pf_8pysndlib_3clm_7mus_any_9mus_phase_2__set__(((struct __pyx_obj_8pysndlib_3clm_mus_any *)__pyx_v_self), ((PyObject *)__pyx_v_v));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_8pysndlib_3clm_7mus_any_9mus_phase_2__set__(struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_self, PyObject *__pyx_v_v) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__set__", 0);
/* … */
  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("pysndlib.clm.mus_any.mus_phase.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 0373:     def mus_phase(self, v):
+0374:         cclm.mus_set_phase(self._ptr, v)
  __pyx_t_1 = __pyx_PyFloat_AsDouble(__pyx_v_v); if (unlikely((__pyx_t_1 == ((mus_float_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 374, __pyx_L1_error)
  (void)(mus_set_phase(__pyx_v_self->_ptr, __pyx_t_1));
 0375: 
+0376:     @property
/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_7mus_any_10mus_length_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_8pysndlib_3clm_7mus_any_10mus_length_1__get__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_8pysndlib_3clm_7mus_any_10mus_length___get__(((struct __pyx_obj_8pysndlib_3clm_mus_any *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_7mus_any_10mus_length___get__(struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pysndlib.clm.mus_any.mus_length.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 0377:     def mus_length(self):
 0378:         """
 0379:         data length, int
 0380:         """
+0381:         return cclm.mus_length(self._ptr)
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyInt_From_mus_long_t(mus_length(__pyx_v_self->_ptr)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 381, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 0382: 
+0383:     @mus_length.setter
/* Python wrapper */
static int __pyx_pw_8pysndlib_3clm_7mus_any_10mus_length_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_v); /*proto*/
static int __pyx_pw_8pysndlib_3clm_7mus_any_10mus_length_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_v) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
  __pyx_r = __pyx_pf_8pysndlib_3clm_7mus_any_10mus_length_2__set__(((struct __pyx_obj_8pysndlib_3clm_mus_any *)__pyx_v_self), ((PyObject *)__pyx_v_v));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_8pysndlib_3clm_7mus_any_10mus_length_2__set__(struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_self, PyObject *__pyx_v_v) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__set__", 0);
/* … */
  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("pysndlib.clm.mus_any.mus_length.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 0384:     def mus_length(self, v):
+0385:         cclm.mus_set_length(self._ptr, v)
  __pyx_t_1 = __Pyx_PyInt_As_mus_long_t(__pyx_v_v); if (unlikely((__pyx_t_1 == ((mus_long_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 385, __pyx_L1_error)
  (void)(mus_set_length(__pyx_v_self->_ptr, __pyx_t_1));
 0386: 
+0387:     @property
/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_7mus_any_13mus_increment_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_8pysndlib_3clm_7mus_any_13mus_increment_1__get__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_8pysndlib_3clm_7mus_any_13mus_increment___get__(((struct __pyx_obj_8pysndlib_3clm_mus_any *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_7mus_any_13mus_increment___get__(struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pysndlib.clm.mus_any.mus_increment.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 0388:     def mus_increment(self):
 0389:         """
 0390:         various increments, int
 0391:         """
+0392:         return cclm.mus_increment(self._ptr)
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = PyFloat_FromDouble(mus_increment(__pyx_v_self->_ptr)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 392, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 0393: 
+0394:     @mus_increment.setter
/* Python wrapper */
static int __pyx_pw_8pysndlib_3clm_7mus_any_13mus_increment_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_v); /*proto*/
static int __pyx_pw_8pysndlib_3clm_7mus_any_13mus_increment_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_v) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
  __pyx_r = __pyx_pf_8pysndlib_3clm_7mus_any_13mus_increment_2__set__(((struct __pyx_obj_8pysndlib_3clm_mus_any *)__pyx_v_self), ((PyObject *)__pyx_v_v));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_8pysndlib_3clm_7mus_any_13mus_increment_2__set__(struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_self, PyObject *__pyx_v_v) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__set__", 0);
/* … */
  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("pysndlib.clm.mus_any.mus_increment.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 0395:     def mus_increment(self, v):
+0396:         cclm.mus_set_increment(self._ptr, v)
  __pyx_t_1 = __pyx_PyFloat_AsDouble(__pyx_v_v); if (unlikely((__pyx_t_1 == ((mus_float_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 396, __pyx_L1_error)
  (void)(mus_set_increment(__pyx_v_self->_ptr, __pyx_t_1));
 0397: 
+0398:     @property
/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_7mus_any_12mus_location_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_8pysndlib_3clm_7mus_any_12mus_location_1__get__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_8pysndlib_3clm_7mus_any_12mus_location___get__(((struct __pyx_obj_8pysndlib_3clm_mus_any *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_7mus_any_12mus_location___get__(struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pysndlib.clm.mus_any.mus_location.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 0399:     def mus_location(self):
 0400:         """
 0401:         sample location for reads/write, int
 0402:         """
+0403:         return cclm.mus_location(self._ptr)
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyInt_From_mus_long_t(mus_location(__pyx_v_self->_ptr)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 403, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 0404: 
+0405:     @mus_location.setter
/* Python wrapper */
static int __pyx_pw_8pysndlib_3clm_7mus_any_12mus_location_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_v); /*proto*/
static int __pyx_pw_8pysndlib_3clm_7mus_any_12mus_location_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_v) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
  __pyx_r = __pyx_pf_8pysndlib_3clm_7mus_any_12mus_location_2__set__(((struct __pyx_obj_8pysndlib_3clm_mus_any *)__pyx_v_self), ((PyObject *)__pyx_v_v));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_8pysndlib_3clm_7mus_any_12mus_location_2__set__(struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_self, PyObject *__pyx_v_v) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__set__", 0);
/* … */
  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("pysndlib.clm.mus_any.mus_location.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 0406:     def mus_location(self, v):
+0407:         cclm.mus_set_location(self._ptr, v)
  __pyx_t_1 = __Pyx_PyInt_As_mus_long_t(__pyx_v_v); if (unlikely((__pyx_t_1 == ((mus_long_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 407, __pyx_L1_error)
  (void)(mus_set_location(__pyx_v_self->_ptr, __pyx_t_1));
 0408: 
+0409:     @property
/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_7mus_any_10mus_offset_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_8pysndlib_3clm_7mus_any_10mus_offset_1__get__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_8pysndlib_3clm_7mus_any_10mus_offset___get__(((struct __pyx_obj_8pysndlib_3clm_mus_any *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_7mus_any_10mus_offset___get__(struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pysndlib.clm.mus_any.mus_offset.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 0410:     def mus_offset(self):
+0411:         return cclm.mus_offset(self._ptr)
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = PyFloat_FromDouble(mus_offset(__pyx_v_self->_ptr)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 411, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 0412: 
+0413:     @mus_offset.setter
/* Python wrapper */
static int __pyx_pw_8pysndlib_3clm_7mus_any_10mus_offset_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_v); /*proto*/
static int __pyx_pw_8pysndlib_3clm_7mus_any_10mus_offset_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_v) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
  __pyx_r = __pyx_pf_8pysndlib_3clm_7mus_any_10mus_offset_2__set__(((struct __pyx_obj_8pysndlib_3clm_mus_any *)__pyx_v_self), ((PyObject *)__pyx_v_v));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_8pysndlib_3clm_7mus_any_10mus_offset_2__set__(struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_self, PyObject *__pyx_v_v) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__set__", 0);
/* … */
  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("pysndlib.clm.mus_any.mus_offset.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 0414:     def mus_offset(self, v):
 0415:         """
 0416:         envelope offset, int
 0417:         """
+0418:         cclm.mus_set_offset(self._ptr, v)
  __pyx_t_1 = __pyx_PyFloat_AsDouble(__pyx_v_v); if (unlikely((__pyx_t_1 == ((mus_float_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 418, __pyx_L1_error)
  (void)(mus_set_offset(__pyx_v_self->_ptr, __pyx_t_1));
 0419: 
+0420:     @property
/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_7mus_any_12mus_channels_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_8pysndlib_3clm_7mus_any_12mus_channels_1__get__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_8pysndlib_3clm_7mus_any_12mus_channels___get__(((struct __pyx_obj_8pysndlib_3clm_mus_any *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_7mus_any_12mus_channels___get__(struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pysndlib.clm.mus_any.mus_channels.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 0421:     def mus_channels(self):
 0422:         """
 0423:         channels open, int
 0424:         """
+0425:         return cclm.mus_channels(self._ptr)
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyInt_From_int(mus_channels(__pyx_v_self->_ptr)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 425, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 0426: 
 0427: 
+0428:     @property
/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_7mus_any_15mus_interp_type_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_8pysndlib_3clm_7mus_any_15mus_interp_type_1__get__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_8pysndlib_3clm_7mus_any_15mus_interp_type___get__(((struct __pyx_obj_8pysndlib_3clm_mus_any *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_7mus_any_15mus_interp_type___get__(struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pysndlib.clm.mus_any.mus_interp_type.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 0429:     def mus_interp_type(self):
 0430:         """
 0431:         interpolation type (inter.linear, etc), interp
 0432:         not setable
 0433:         """
+0434:         return cclm.mus_interp_type(self._ptr)
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyInt_From_int(mus_interp_type(__pyx_v_self->_ptr)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 434, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 0435: 
+0436:     @property
/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_7mus_any_9mus_width_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_8pysndlib_3clm_7mus_any_9mus_width_1__get__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_8pysndlib_3clm_7mus_any_9mus_width___get__(((struct __pyx_obj_8pysndlib_3clm_mus_any *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_7mus_any_9mus_width___get__(struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pysndlib.clm.mus_any.mus_width.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 0437:     def mus_width(self):
 0438:         """
 0439:         width of interpolation tables, etc, int
 0440:         """
+0441:         return cclm.mus_width(self._ptr)
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = PyFloat_FromDouble(mus_width(__pyx_v_self->_ptr)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 441, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 0442: 
+0443:     @mus_width.setter
/* Python wrapper */
static int __pyx_pw_8pysndlib_3clm_7mus_any_9mus_width_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_v); /*proto*/
static int __pyx_pw_8pysndlib_3clm_7mus_any_9mus_width_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_v) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
  __pyx_r = __pyx_pf_8pysndlib_3clm_7mus_any_9mus_width_2__set__(((struct __pyx_obj_8pysndlib_3clm_mus_any *)__pyx_v_self), ((PyObject *)__pyx_v_v));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_8pysndlib_3clm_7mus_any_9mus_width_2__set__(struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_self, PyObject *__pyx_v_v) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__set__", 0);
/* … */
  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("pysndlib.clm.mus_any.mus_width.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 0444:     def mus_width(self, v):
+0445:         cclm.mus_set_width(self._ptr, v)
  __pyx_t_1 = __pyx_PyFloat_AsDouble(__pyx_v_v); if (unlikely((__pyx_t_1 == ((mus_float_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 445, __pyx_L1_error)
  (void)(mus_set_width(__pyx_v_self->_ptr, __pyx_t_1));
 0446: 
+0447:     @property
/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_7mus_any_9mus_order_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_8pysndlib_3clm_7mus_any_9mus_order_1__get__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_8pysndlib_3clm_7mus_any_9mus_order___get__(((struct __pyx_obj_8pysndlib_3clm_mus_any *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_7mus_any_9mus_order___get__(struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pysndlib.clm.mus_any.mus_order.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 0448:     def mus_order(self):
 0449:         """
 0450:         filter order, int
 0451:         """
+0452:         return cclm.mus_order(self._ptr)
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyInt_From_mus_long_t(mus_order(__pyx_v_self->_ptr)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 452, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 0453: 
+0454:     @property
/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_7mus_any_10mus_scaler_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_8pysndlib_3clm_7mus_any_10mus_scaler_1__get__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_8pysndlib_3clm_7mus_any_10mus_scaler___get__(((struct __pyx_obj_8pysndlib_3clm_mus_any *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_7mus_any_10mus_scaler___get__(struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pysndlib.clm.mus_any.mus_scaler.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 0455:     def mus_scaler(self):
 0456:         """
 0457:         scaler, normally on an amplitude, float
 0458:         """
+0459:         return cclm.mus_scaler(self._ptr)
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = PyFloat_FromDouble(mus_scaler(__pyx_v_self->_ptr)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 459, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 0460: 
+0461:     @mus_scaler.setter
/* Python wrapper */
static int __pyx_pw_8pysndlib_3clm_7mus_any_10mus_scaler_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_v); /*proto*/
static int __pyx_pw_8pysndlib_3clm_7mus_any_10mus_scaler_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_v) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
  __pyx_r = __pyx_pf_8pysndlib_3clm_7mus_any_10mus_scaler_2__set__(((struct __pyx_obj_8pysndlib_3clm_mus_any *)__pyx_v_self), ((PyObject *)__pyx_v_v));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_8pysndlib_3clm_7mus_any_10mus_scaler_2__set__(struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_self, PyObject *__pyx_v_v) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__set__", 0);
/* … */
  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("pysndlib.clm.mus_any.mus_scaler.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 0462:     def mus_scaler(self, v):
+0463:         cclm.mus_set_scaler(self._ptr, v)
  __pyx_t_1 = __pyx_PyFloat_AsDouble(__pyx_v_v); if (unlikely((__pyx_t_1 == ((mus_float_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 463, __pyx_L1_error)
  (void)(mus_set_scaler(__pyx_v_self->_ptr, __pyx_t_1));
 0464: 
+0465:     @property
/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_7mus_any_12mus_feedback_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_8pysndlib_3clm_7mus_any_12mus_feedback_1__get__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_8pysndlib_3clm_7mus_any_12mus_feedback___get__(((struct __pyx_obj_8pysndlib_3clm_mus_any *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_7mus_any_12mus_feedback___get__(struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pysndlib.clm.mus_any.mus_feedback.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 0466:     def mus_feedback(self):
 0467:         """
 0468:         feedback coefficient, float
 0469:         """
+0470:         return cclm.mus_feedback(self._ptr)
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = PyFloat_FromDouble(mus_feedback(__pyx_v_self->_ptr)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 470, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 0471: 
+0472:     @mus_feedback.setter
/* Python wrapper */
static int __pyx_pw_8pysndlib_3clm_7mus_any_12mus_feedback_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_v); /*proto*/
static int __pyx_pw_8pysndlib_3clm_7mus_any_12mus_feedback_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_v) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
  __pyx_r = __pyx_pf_8pysndlib_3clm_7mus_any_12mus_feedback_2__set__(((struct __pyx_obj_8pysndlib_3clm_mus_any *)__pyx_v_self), ((PyObject *)__pyx_v_v));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_8pysndlib_3clm_7mus_any_12mus_feedback_2__set__(struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_self, PyObject *__pyx_v_v) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__set__", 0);
/* … */
  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("pysndlib.clm.mus_any.mus_feedback.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 0473:     def mus_feedback(self, v):
+0474:         cclm.mus_set_feedback(self._ptr, v)
  __pyx_t_1 = __pyx_PyFloat_AsDouble(__pyx_v_v); if (unlikely((__pyx_t_1 == ((mus_float_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 474, __pyx_L1_error)
  (void)(mus_set_feedback(__pyx_v_self->_ptr, __pyx_t_1));
 0475: 
+0476:     @property
/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_7mus_any_15mus_feedforward_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_8pysndlib_3clm_7mus_any_15mus_feedforward_1__get__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_8pysndlib_3clm_7mus_any_15mus_feedforward___get__(((struct __pyx_obj_8pysndlib_3clm_mus_any *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_7mus_any_15mus_feedforward___get__(struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pysndlib.clm.mus_any.mus_feedforward.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 0477:     def mus_feedforward(self):
 0478:         """
 0479:         feedforward coefficient, float
 0480:         """
+0481:         return cclm.mus_feedforward(self._ptr)
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = PyFloat_FromDouble(mus_feedforward(__pyx_v_self->_ptr)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 481, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 0482: 
+0483:     @mus_feedforward.setter
/* Python wrapper */
static int __pyx_pw_8pysndlib_3clm_7mus_any_15mus_feedforward_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_v); /*proto*/
static int __pyx_pw_8pysndlib_3clm_7mus_any_15mus_feedforward_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_v) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
  __pyx_r = __pyx_pf_8pysndlib_3clm_7mus_any_15mus_feedforward_2__set__(((struct __pyx_obj_8pysndlib_3clm_mus_any *)__pyx_v_self), ((PyObject *)__pyx_v_v));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_8pysndlib_3clm_7mus_any_15mus_feedforward_2__set__(struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_self, PyObject *__pyx_v_v) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__set__", 0);
/* … */
  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("pysndlib.clm.mus_any.mus_feedforward.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 0484:     def mus_feedforward(self, v):
+0485:         cclm.mus_set_feedforward(self._ptr, v)
  __pyx_t_1 = __pyx_PyFloat_AsDouble(__pyx_v_v); if (unlikely((__pyx_t_1 == ((mus_float_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 485, __pyx_L1_error)
  (void)(mus_set_feedforward(__pyx_v_self->_ptr, __pyx_t_1));
 0486: 
+0487:     @property
/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_7mus_any_7mus_hop_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_8pysndlib_3clm_7mus_any_7mus_hop_1__get__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_8pysndlib_3clm_7mus_any_7mus_hop___get__(((struct __pyx_obj_8pysndlib_3clm_mus_any *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_7mus_any_7mus_hop___get__(struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pysndlib.clm.mus_any.mus_hop.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 0488:     def mus_hop(self):
 0489:         """
 0490:         hop size for block processing, int
 0491:         """
+0492:         return cclm.mus_hop(self._ptr)
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyInt_From_mus_long_t(mus_hop(__pyx_v_self->_ptr)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 492, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 0493: 
+0494:     @mus_hop.setter
/* Python wrapper */
static int __pyx_pw_8pysndlib_3clm_7mus_any_7mus_hop_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_v); /*proto*/
static int __pyx_pw_8pysndlib_3clm_7mus_any_7mus_hop_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_v) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
  __pyx_r = __pyx_pf_8pysndlib_3clm_7mus_any_7mus_hop_2__set__(((struct __pyx_obj_8pysndlib_3clm_mus_any *)__pyx_v_self), ((PyObject *)__pyx_v_v));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_8pysndlib_3clm_7mus_any_7mus_hop_2__set__(struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_self, PyObject *__pyx_v_v) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__set__", 0);
/* … */
  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("pysndlib.clm.mus_any.mus_hop.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 0495:     def mus_hop(self, v):
+0496:         cclm.mus_set_hop(self._ptr, v)
  __pyx_t_1 = __Pyx_PyInt_As_mus_long_t(__pyx_v_v); if (unlikely((__pyx_t_1 == ((mus_long_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 496, __pyx_L1_error)
  (void)(mus_set_hop(__pyx_v_self->_ptr, __pyx_t_1));
 0497: 
+0498:     @property
/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_7mus_any_8mus_ramp_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_8pysndlib_3clm_7mus_any_8mus_ramp_1__get__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_8pysndlib_3clm_7mus_any_8mus_ramp___get__(((struct __pyx_obj_8pysndlib_3clm_mus_any *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_7mus_any_8mus_ramp___get__(struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pysndlib.clm.mus_any.mus_ramp.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 0499:     def mus_ramp(self):
 0500:         """
 0501:         granulate grain envelope ramp setting, int
 0502:         """
+0503:         return cclm.mus_ramp(self._ptr)
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyInt_From_mus_long_t(mus_ramp(__pyx_v_self->_ptr)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 503, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 0504: 
+0505:     @mus_ramp.setter
/* Python wrapper */
static int __pyx_pw_8pysndlib_3clm_7mus_any_8mus_ramp_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_v); /*proto*/
static int __pyx_pw_8pysndlib_3clm_7mus_any_8mus_ramp_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_v) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
  __pyx_r = __pyx_pf_8pysndlib_3clm_7mus_any_8mus_ramp_2__set__(((struct __pyx_obj_8pysndlib_3clm_mus_any *)__pyx_v_self), ((PyObject *)__pyx_v_v));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_8pysndlib_3clm_7mus_any_8mus_ramp_2__set__(struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_self, PyObject *__pyx_v_v) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__set__", 0);
/* … */
  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("pysndlib.clm.mus_any.mus_ramp.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 0506:     def mus_ramp(self, v):
+0507:         cclm.mus_set_ramp(self._ptr, v)
  __pyx_t_1 = __Pyx_PyInt_As_mus_long_t(__pyx_v_v); if (unlikely((__pyx_t_1 == ((mus_long_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 507, __pyx_L1_error)
  (void)(mus_set_ramp(__pyx_v_self->_ptr, __pyx_t_1));
 0508: 
+0509:     @property
/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_7mus_any_11mus_channel_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_8pysndlib_3clm_7mus_any_11mus_channel_1__get__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_8pysndlib_3clm_7mus_any_11mus_channel___get__(((struct __pyx_obj_8pysndlib_3clm_mus_any *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_7mus_any_11mus_channel___get__(struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pysndlib.clm.mus_any.mus_channel.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 0510:     def mus_channel(self):
 0511:         """
 0512:         channel being read/written, int
 0513:         """
+0514:         return cclm.mus_channel(self._ptr)
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyInt_From_int(mus_channel(__pyx_v_self->_ptr)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 514, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 0515: 
+0516:     @property
/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_7mus_any_8mus_data_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_8pysndlib_3clm_7mus_any_8mus_data_1__get__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_8pysndlib_3clm_7mus_any_8mus_data___get__(((struct __pyx_obj_8pysndlib_3clm_mus_any *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_7mus_any_8mus_data___get__(struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("pysndlib.clm.mus_any.mus_data.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 0517:     def mus_data(self):
 0518:         """
 0519:         array of data, np.ndarray
 0520:         """
+0521:         if not cclm.mus_data_exists(self._ptr):   #could do this on all properties but seems best with array 
  __pyx_t_1 = (!mus_data_exists(__pyx_v_self->_ptr));
  if (unlikely(__pyx_t_1)) {
/* … */
  }
+0522:             raise TypeError(f'mus_data can not be called on {cclm.mus_name(self._ptr)}')
    __pyx_t_2 = __Pyx_PyUnicode_FromString(mus_name(__pyx_v_self->_ptr)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 522, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_3 = __Pyx_PyUnicode_Concat(__pyx_kp_u_mus_data_can_not_be_called_on, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 522, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_builtin_TypeError, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 522, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __PYX_ERR(0, 522, __pyx_L1_error)
+0523:         return self._data
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF((PyObject *)__pyx_v_self->_data);
  __pyx_r = ((PyObject *)__pyx_v_self->_data);
  goto __pyx_L0;
 0524: 
+0525:     @mus_data.setter
/* Python wrapper */
static int __pyx_pw_8pysndlib_3clm_7mus_any_8mus_data_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_data); /*proto*/
static int __pyx_pw_8pysndlib_3clm_7mus_any_8mus_data_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_data) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
  __pyx_r = __pyx_pf_8pysndlib_3clm_7mus_any_8mus_data_2__set__(((struct __pyx_obj_8pysndlib_3clm_mus_any *)__pyx_v_self), ((PyObject *)__pyx_v_data));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_8pysndlib_3clm_7mus_any_8mus_data_2__set__(struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_self, PyObject *__pyx_v_data) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__set__", 0);
/* … */
  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("pysndlib.clm.mus_any.mus_data.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 0526:     def mus_data(self, data: npt.NDArray[np.float64]):
+0527:         if not cclm.mus_data_exists(self._ptr):   #could do this on all properties but seems best with array 
  __pyx_t_1 = (!mus_data_exists(__pyx_v_self->_ptr));
  if (unlikely(__pyx_t_1)) {
/* … */
  }
+0528:             raise TypeError(f'mus_data can not be called on {cclm.mus_name(self._ptr)}')
    __pyx_t_2 = __Pyx_PyUnicode_FromString(mus_name(__pyx_v_self->_ptr)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 528, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_3 = __Pyx_PyUnicode_Concat(__pyx_kp_u_mus_data_can_not_be_called_on, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 528, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_builtin_TypeError, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 528, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __PYX_ERR(0, 528, __pyx_L1_error)
 0529: 
+0530:         np.copyto(self._data , data)
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 530, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_copyto); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 530, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = NULL;
  __pyx_t_5 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_4, function);
      __pyx_t_5 = 1;
    }
  }
  {
    PyObject *__pyx_callargs[3] = {__pyx_t_3, ((PyObject *)__pyx_v_self->_data), __pyx_v_data};
    __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_5, 2+__pyx_t_5);
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 530, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 0531: 
+0532:     @property
/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_7mus_any_11mus_xcoeffs_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_8pysndlib_3clm_7mus_any_11mus_xcoeffs_1__get__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_8pysndlib_3clm_7mus_any_11mus_xcoeffs___get__(((struct __pyx_obj_8pysndlib_3clm_mus_any *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_7mus_any_11mus_xcoeffs___get__(struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("pysndlib.clm.mus_any.mus_xcoeffs.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 0533:     def mus_xcoeffs(self):
 0534:         """
 0535:         x (input) coefficient, np.ndarray
 0536:         not setable
 0537:         """
+0538:         if not cclm.mus_xcoeffs_exists(self._ptr):   #could do this on all properties but seems best with array 
  __pyx_t_1 = (!mus_xcoeffs_exists(__pyx_v_self->_ptr));
  if (unlikely(__pyx_t_1)) {
/* … */
  }
+0539:             raise TypeError(f'mus_xcoeffs can not be called on {cclm.mus_name(self._ptr)}')
    __pyx_t_2 = __Pyx_PyUnicode_FromString(mus_name(__pyx_v_self->_ptr)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 539, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_3 = __Pyx_PyUnicode_Concat(__pyx_kp_u_mus_xcoeffs_can_not_be_called_on, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 539, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_builtin_TypeError, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 539, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __PYX_ERR(0, 539, __pyx_L1_error)
+0540:         return self._xcoeffs
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF((PyObject *)__pyx_v_self->_xcoeffs);
  __pyx_r = ((PyObject *)__pyx_v_self->_xcoeffs);
  goto __pyx_L0;
 0541: 
+0542:     @property
/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_7mus_any_11mus_ycoeffs_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_8pysndlib_3clm_7mus_any_11mus_ycoeffs_1__get__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_8pysndlib_3clm_7mus_any_11mus_ycoeffs___get__(((struct __pyx_obj_8pysndlib_3clm_mus_any *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_7mus_any_11mus_ycoeffs___get__(struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("pysndlib.clm.mus_any.mus_ycoeffs.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 0543:     def mus_ycoeffs(self):
 0544:         """
 0545:         y (output, feedback) coefficient, np.ndarray
 0546:         not setable
 0547:         """
+0548:         if not cclm.mus_xcoeffs_exists(self._ptr):   #could do this on all properties but seems best with array 
  __pyx_t_1 = (!mus_xcoeffs_exists(__pyx_v_self->_ptr));
  if (unlikely(__pyx_t_1)) {
/* … */
  }
+0549:             raise TypeError(f'mus_ycoeffs can not be called on {cclm.mus_name(self._ptr)}')
    __pyx_t_2 = __Pyx_PyUnicode_FromString(mus_name(__pyx_v_self->_ptr)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 549, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_3 = __Pyx_PyUnicode_Concat(__pyx_kp_u_mus_ycoeffs_can_not_be_called_on, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 549, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_builtin_TypeError, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 549, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __PYX_ERR(0, 549, __pyx_L1_error)
+0550:         return self._ycoeffs
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF((PyObject *)__pyx_v_self->_ycoeffs);
  __pyx_r = ((PyObject *)__pyx_v_self->_ycoeffs);
  goto __pyx_L0;
 0551: 
 0552: 
 0553: 
+0554: cdef class mus_any_array:
struct __pyx_obj_8pysndlib_3clm_mus_any_array {
  PyObject_HEAD
  struct __pyx_vtabstruct_8pysndlib_3clm_mus_any_array *__pyx_vtab;
  mus_any_ptr_ptr data;
  size_t item_count;
};
/* … */
struct __pyx_vtabstruct_8pysndlib_3clm_mus_any_array {
  struct __pyx_obj_8pysndlib_3clm_mus_any_array *(*from_pylist)(PyObject *);
};
static struct __pyx_vtabstruct_8pysndlib_3clm_mus_any_array *__pyx_vtabptr_8pysndlib_3clm_mus_any_array;

 0555:     """
 0556:     a wrapper class arrays of mus_any objects
 0557:     :meta private:
 0558:     """
 0559:     cdef  cclm.mus_any_ptr_ptr data
 0560:     item_count: cython.size_t
+0561:     def __cinit__(self, number: cython.size_t):
/* Python wrapper */
static int __pyx_pw_8pysndlib_3clm_13mus_any_array_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_pw_8pysndlib_3clm_13mus_any_array_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  size_t __pyx_v_number;
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_number,0};
    PyObject* values[1] = {0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  1: values[0] = __Pyx_Arg_VARARGS(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_VARARGS(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_number)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 561, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "__cinit__") < 0)) __PYX_ERR(0, 561, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_VARARGS(__pyx_args, 0);
    }
    __pyx_v_number = __Pyx_PyInt_As_size_t(values[0]); if (unlikely((__pyx_v_number == (size_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 561, __pyx_L3_error)
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 561, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.mus_any_array.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return -1;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pysndlib_3clm_13mus_any_array___cinit__(((struct __pyx_obj_8pysndlib_3clm_mus_any_array *)__pyx_v_self), __pyx_v_number);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_8pysndlib_3clm_13mus_any_array___cinit__(struct __pyx_obj_8pysndlib_3clm_mus_any_array *__pyx_v_self, size_t __pyx_v_number) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__cinit__", 0);
/* … */
  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("pysndlib.clm.mus_any_array.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 0562:         # allocate some memory (uninitialised, may contain arbitrary data)
+0563:         if number > 0:
  __pyx_t_1 = (__pyx_v_number > 0);
  if (__pyx_t_1) {
/* … */
  }
+0564:             self.data = cython.cast(cclm.mus_any_ptr_ptr, PyMem_Malloc(
    __pyx_v_self->data = ((mus_any_ptr_ptr)PyMem_Malloc((__pyx_v_number * (sizeof(mus_any_ptr)))));
 0565:                 number * cython.sizeof(cclm.mus_any_ptr)))
+0566:             if not self.data:
    __pyx_t_1 = (!(__pyx_v_self->data != 0));
    if (unlikely(__pyx_t_1)) {
/* … */
    }
+0567:                 raise MemoryError()
      PyErr_NoMemory(); __PYX_ERR(0, 567, __pyx_L1_error)
+0568:         self.item_count = number
  __pyx_v_self->item_count = __pyx_v_number;
 0569: 
 0570: 
+0571:     def __dealloc__(self):
/* Python wrapper */
static void __pyx_pw_8pysndlib_3clm_13mus_any_array_3__dealloc__(PyObject *__pyx_v_self); /*proto*/
static void __pyx_pw_8pysndlib_3clm_13mus_any_array_3__dealloc__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__dealloc__ (wrapper)", 0);
  __pyx_pf_8pysndlib_3clm_13mus_any_array_2__dealloc__(((struct __pyx_obj_8pysndlib_3clm_mus_any_array *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
}

static void __pyx_pf_8pysndlib_3clm_13mus_any_array_2__dealloc__(struct __pyx_obj_8pysndlib_3clm_mus_any_array *__pyx_v_self) {
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__dealloc__", 0);
/* … */
  /* function exit code */
  __Pyx_RefNannyFinishContext();
}
+0572:         PyMem_Free(self.data)  # no-op if self.data is null
  PyMem_Free(__pyx_v_self->data);
 0573: 
+0574:     def __len__(self):
/* Python wrapper */
static Py_ssize_t __pyx_pw_8pysndlib_3clm_13mus_any_array_5__len__(PyObject *__pyx_v_self); /*proto*/
static Py_ssize_t __pyx_pw_8pysndlib_3clm_13mus_any_array_5__len__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  Py_ssize_t __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__len__ (wrapper)", 0);
  __pyx_r = __pyx_pf_8pysndlib_3clm_13mus_any_array_4__len__(((struct __pyx_obj_8pysndlib_3clm_mus_any_array *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static Py_ssize_t __pyx_pf_8pysndlib_3clm_13mus_any_array_4__len__(struct __pyx_obj_8pysndlib_3clm_mus_any_array *__pyx_v_self) {
  Py_ssize_t __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__len__", 0);
/* … */
  /* function exit code */
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+0575:         return self.item_count
  __pyx_r = __pyx_v_self->item_count;
  goto __pyx_L0;
 0576: 
+0577:     def __str__(self):
/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_13mus_any_array_7__str__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_8pysndlib_3clm_13mus_any_array_7__str__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__str__ (wrapper)", 0);
  __pyx_r = __pyx_pf_8pysndlib_3clm_13mus_any_array_6__str__(((struct __pyx_obj_8pysndlib_3clm_mus_any_array *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_13mus_any_array_6__str__(struct __pyx_obj_8pysndlib_3clm_mus_any_array *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__str__", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pysndlib.clm.mus_any_array.__str__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+0578:         return f"count {self.item_count}"
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyUnicode_From_size_t(__pyx_v_self->item_count, 0, ' ', 'd'); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 578, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyUnicode_Concat(__pyx_kp_u_count, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 578, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;
 0579: 
 0580:     @staticmethod
+0581:     cdef mus_any_array from_pylist(lst: list):
static struct __pyx_obj_8pysndlib_3clm_mus_any_array *__pyx_f_8pysndlib_3clm_13mus_any_array_from_pylist(PyObject *__pyx_v_lst) {
  int __pyx_v_i;
  struct __pyx_obj_8pysndlib_3clm_mus_any_array *__pyx_v_wrapper = 0;
  struct __pyx_obj_8pysndlib_3clm_mus_any_array *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("from_pylist", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("pysndlib.clm.mus_any_array.from_pylist", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_wrapper);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 0582:         """
 0583:         factory function to create a wrapper around mus_float_t (double) and fill it with values from the list
 0584:         """
 0585:         cdef int i
 0586: 
+0587:         cdef mus_any_array wrapper = mus_any_array(len(lst))
  __pyx_t_1 = PyList_GET_SIZE(__pyx_v_lst); if (unlikely(__pyx_t_1 == ((Py_ssize_t)-1))) __PYX_ERR(0, 587, __pyx_L1_error)
  __pyx_t_2 = PyInt_FromSsize_t(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 587, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyObject_CallOneArg(((PyObject *)__pyx_ptype_8pysndlib_3clm_mus_any_array), __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 587, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_v_wrapper = ((struct __pyx_obj_8pysndlib_3clm_mus_any_array *)__pyx_t_3);
  __pyx_t_3 = 0;
+0588:         for i in range(len(lst)):
  __pyx_t_1 = PyList_GET_SIZE(__pyx_v_lst); if (unlikely(__pyx_t_1 == ((Py_ssize_t)-1))) __PYX_ERR(0, 588, __pyx_L1_error)
  __pyx_t_4 = __pyx_t_1;
  for (__pyx_t_5 = 0; __pyx_t_5 < __pyx_t_4; __pyx_t_5+=1) {
    __pyx_v_i = __pyx_t_5;
+0589:             wrapper.data[i] = (<mus_any>lst[i])._ptr
    __pyx_t_3 = __Pyx_GetItemInt_List(__pyx_v_lst, __pyx_v_i, int, 1, __Pyx_PyInt_From_int, 1, 1, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 589, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_6 = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)__pyx_t_3)->_ptr;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    (__pyx_v_wrapper->data[__pyx_v_i]) = __pyx_t_6;
  }
+0590:         return wrapper
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __Pyx_INCREF((PyObject *)__pyx_v_wrapper);
  __pyx_r = __pyx_v_wrapper;
  goto __pyx_L0;
 0591: 
 0592: 
 0593: 
 0594: 
 0595: # --------------- callbacks ---------------- #
 0596: 
+0597: cdef double input_callback_func(void* arg, int direction):
static double __pyx_f_8pysndlib_3clm_input_callback_func(void *__pyx_v_arg, int __pyx_v_direction) {
  mus_any_ptr __pyx_v_gen;
  double __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("input_callback_func", 0);
/* … */
  /* function exit code */
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+0598:     cdef cclm.mus_any_ptr gen = <cclm.mus_any_ptr>arg
  __pyx_v_gen = ((mus_any_ptr)__pyx_v_arg);
+0599:     return cclm.mus_apply(gen, direction, 0.)
  __pyx_r = mus_apply(__pyx_v_gen, __pyx_v_direction, 0.);
  goto __pyx_L0;
 0600: 
 0601: 
+0602: cdef void locsig_detour_callback_func(cclm.mus_any *ptr, cclm.mus_long_t val):
static void __pyx_f_8pysndlib_3clm_locsig_detour_callback_func(mus_any *__pyx_v_ptr, mus_long_t __pyx_v_val) {
  int __pyx_v_channels;
  int __pyx_v_reverb_channels;
  mus_float_t *__pyx_v_outf;
  mus_float_t *__pyx_v_revf;
  int __pyx_v_i;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("locsig_detour_callback_func", 0);
/* … */
  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_AddTraceback("pysndlib.clm.locsig_detour_callback_func", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
}
+0603:     cdef int channels = cclm.mus_locsig_channels(ptr)
  __pyx_v_channels = mus_locsig_channels(__pyx_v_ptr);
+0604:     cdef int reverb_channels = cclm.mus_locsig_reverb_channels(ptr)
  __pyx_v_reverb_channels = mus_locsig_reverb_channels(__pyx_v_ptr);
+0605:     cdef cclm.mus_float_t* outf = cclm.mus_locsig_outf(ptr)
  __pyx_v_outf = mus_locsig_outf(__pyx_v_ptr);
+0606:     cdef cclm.mus_float_t* revf = cclm.mus_locsig_revf(ptr)
  __pyx_v_revf = mus_locsig_revf(__pyx_v_ptr);
+0607:     for i in range(channels):
  __pyx_t_1 = __pyx_v_channels;
  __pyx_t_2 = __pyx_t_1;
  for (__pyx_t_3 = 0; __pyx_t_3 < __pyx_t_2; __pyx_t_3+=1) {
    __pyx_v_i = __pyx_t_3;
+0608:          CLM.output[i][val] += outf[i]
    __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_CLM); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 608, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_output); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 608, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_4 = __Pyx_GetItemInt(__pyx_t_5, __pyx_v_i, int, 1, __Pyx_PyInt_From_int, 0, 1, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 608, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_6 = __pyx_v_val;
    __pyx_t_5 = __Pyx_GetItemInt(__pyx_t_4, __pyx_t_6, mus_long_t, 1, __Pyx_PyInt_From_mus_long_t, 0, 1, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 608, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_7 = PyFloat_FromDouble((__pyx_v_outf[__pyx_v_i])); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 608, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __pyx_t_8 = PyNumber_InPlaceAdd(__pyx_t_5, __pyx_t_7); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 608, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    if (unlikely((__Pyx_SetItemInt(__pyx_t_4, __pyx_t_6, __pyx_t_8, mus_long_t, 1, __Pyx_PyInt_From_mus_long_t, 0, 1, 1) < 0))) __PYX_ERR(0, 608, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  }
+0609:     for i in range(reverb_channels):
  __pyx_t_1 = __pyx_v_reverb_channels;
  __pyx_t_2 = __pyx_t_1;
  for (__pyx_t_3 = 0; __pyx_t_3 < __pyx_t_2; __pyx_t_3+=1) {
    __pyx_v_i = __pyx_t_3;
+0610:          CLM.reverb[i][val] += revf[i]
    __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_CLM); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 610, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_reverb); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 610, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_4 = __Pyx_GetItemInt(__pyx_t_8, __pyx_v_i, int, 1, __Pyx_PyInt_From_int, 0, 1, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 610, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __pyx_t_6 = __pyx_v_val;
    __pyx_t_8 = __Pyx_GetItemInt(__pyx_t_4, __pyx_t_6, mus_long_t, 1, __Pyx_PyInt_From_mus_long_t, 0, 1, 1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 610, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __pyx_t_7 = PyFloat_FromDouble((__pyx_v_revf[__pyx_v_i])); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 610, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __pyx_t_5 = PyNumber_InPlaceAdd(__pyx_t_8, __pyx_t_7); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 610, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    if (unlikely((__Pyx_SetItemInt(__pyx_t_4, __pyx_t_6, __pyx_t_5, mus_long_t, 1, __Pyx_PyInt_From_mus_long_t, 0, 1, 1) < 0))) __PYX_ERR(0, 610, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  }
 0611: 
 0612: 
 0613: # --------------- file2ndarray, ndarray2file ---------------- #                 
+0614: cpdef file2ndarray(filename: str, channel: Optional[int]=None, beg: Optional[int]=None, dur: Optional[int]=None):
static PyObject *__pyx_pw_8pysndlib_3clm_7file2ndarray(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyObject *__pyx_f_8pysndlib_3clm_file2ndarray(PyObject *__pyx_v_filename, CYTHON_UNUSED int __pyx_skip_dispatch, struct __pyx_opt_args_8pysndlib_3clm_file2ndarray *__pyx_optional_args) {
  PyObject *__pyx_v_channel = ((PyObject *)Py_None);
  PyObject *__pyx_v_beg = ((PyObject *)Py_None);
  PyObject *__pyx_v_dur = ((PyObject *)Py_None);
  PyObject *__pyx_v_length = NULL;
  int __pyx_v_chans;
  int __pyx_v_srate;
  PyObject *__pyx_v_bg = NULL;
  PyObject *__pyx_v_out = NULL;
  __Pyx_memviewslice __pyx_v_arr_view = { 0, 0, { 0 }, { 0 }, { 0 } };
  int __pyx_v_i;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("file2ndarray", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_channel = __pyx_optional_args->channel;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_beg = __pyx_optional_args->beg;
        if (__pyx_optional_args->__pyx_n > 2) {
          __pyx_v_dur = __pyx_optional_args->dur;
        }
      }
    }
  }
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_XDECREF(__pyx_t_10);
  __PYX_XCLEAR_MEMVIEW(&__pyx_t_11, 1);
  __Pyx_AddTraceback("pysndlib.clm.file2ndarray", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_length);
  __Pyx_XDECREF(__pyx_v_bg);
  __Pyx_XDECREF(__pyx_v_out);
  __PYX_XCLEAR_MEMVIEW(&__pyx_v_arr_view, 1);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_7file2ndarray(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_6file2ndarray, "\n    return an ndarray with samples from file and the sample rate of the data\n    \n    :param filename: filename\n    :param channel: if None, will read all channels, otherwise just channel specified \n    :param beg: beginning positions to read in samples\n    :param dur: duration in samples to read\n    :return: tuple of np.ndarray and sample rate\n    :rtype: tuple\n    \n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_7file2ndarray = {"file2ndarray", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_7file2ndarray, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_6file2ndarray};
static PyObject *__pyx_pw_8pysndlib_3clm_7file2ndarray(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_filename = 0;
  PyObject *__pyx_v_channel = 0;
  PyObject *__pyx_v_beg = 0;
  PyObject *__pyx_v_dur = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("file2ndarray (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_filename,&__pyx_n_s_channel,&__pyx_n_s_beg,&__pyx_n_s_dur,0};
    PyObject* values[4] = {0,0,0,0};
    values[1] = ((PyObject *)Py_None);
    values[2] = ((PyObject *)Py_None);
    values[3] = ((PyObject *)Py_None);
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  4: values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_filename)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 614, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_channel);
          if (value) { values[1] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 614, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_beg);
          if (value) { values[2] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 614, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_dur);
          if (value) { values[3] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 614, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "file2ndarray") < 0)) __PYX_ERR(0, 614, __pyx_L3_error)
      }
    } else {
      switch (__pyx_nargs) {
        case  4: values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_filename = ((PyObject*)values[0]);
    __pyx_v_channel = values[1];
    __pyx_v_beg = values[2];
    __pyx_v_dur = values[3];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("file2ndarray", 0, 1, 4, __pyx_nargs); __PYX_ERR(0, 614, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.file2ndarray", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_filename), (&PyString_Type), 0, "filename", 1))) __PYX_ERR(0, 614, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pysndlib_3clm_6file2ndarray(__pyx_self, __pyx_v_filename, __pyx_v_channel, __pyx_v_beg, __pyx_v_dur);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_6file2ndarray(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_filename, PyObject *__pyx_v_channel, PyObject *__pyx_v_beg, PyObject *__pyx_v_dur) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("file2ndarray", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2.__pyx_n = 3;
  __pyx_t_2.channel = __pyx_v_channel;
  __pyx_t_2.beg = __pyx_v_beg;
  __pyx_t_2.dur = __pyx_v_dur;
  __pyx_t_1 = __pyx_f_8pysndlib_3clm_file2ndarray(__pyx_v_filename, 0, &__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 614, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pysndlib.clm.file2ndarray", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__114 = PyTuple_Pack(4, __pyx_n_s_filename, __pyx_n_s_channel, __pyx_n_s_beg, __pyx_n_s_dur); if (unlikely(!__pyx_tuple__114)) __PYX_ERR(0, 614, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__114);
  __Pyx_GIVEREF(__pyx_tuple__114);
/* … */
  __pyx_t_40 = __Pyx_PyDict_NewPresized(4); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 614, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  if (PyDict_SetItem(__pyx_t_40, __pyx_n_s_filename, __pyx_n_s_str_2) < 0) __PYX_ERR(0, 614, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_40, __pyx_n_s_channel, __pyx_kp_s_Optional_int) < 0) __PYX_ERR(0, 614, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_40, __pyx_n_s_beg, __pyx_kp_s_Optional_int) < 0) __PYX_ERR(0, 614, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_40, __pyx_n_s_dur, __pyx_kp_s_Optional_int) < 0) __PYX_ERR(0, 614, __pyx_L1_error)
  __pyx_t_41 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_7file2ndarray, 0, __pyx_n_s_file2ndarray, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__115)); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 614, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_41, __pyx_tuple__57);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_41, __pyx_t_40);
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_file2ndarray, __pyx_t_41) < 0) __PYX_ERR(0, 614, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
  __pyx_codeobj__115 = (PyObject*)__Pyx_PyCode_New(4, 0, 0, 4, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__114, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_file2ndarray, 614, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__115)) __PYX_ERR(0, 614, __pyx_L1_error)
/* … */
struct __pyx_opt_args_8pysndlib_3clm_file2ndarray {
  int __pyx_n;
  PyObject *channel;
  PyObject *beg;
  PyObject *dur;
};
 0615:     """
 0616:     return an ndarray with samples from file and the sample rate of the data
 0617:     
 0618:     :param filename: filename
 0619:     :param channel: if None, will read all channels, otherwise just channel specified 
 0620:     :param beg: beginning positions to read in samples
 0621:     :param dur: duration in samples to read
 0622:     :return: tuple of np.ndarray and sample rate
 0623:     :rtype: tuple
 0624:     
 0625:     """
+0626:     length = dur or csndlib.mus_sound_framples(filename)
  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_dur); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 626, __pyx_L1_error)
  if (!__pyx_t_2) {
  } else {
    __Pyx_INCREF(__pyx_v_dur);
    __pyx_t_1 = __pyx_v_dur;
    goto __pyx_L3_bool_binop_done;
  }
  __pyx_t_3 = __Pyx_PyObject_AsString(__pyx_v_filename); if (unlikely((!__pyx_t_3) && PyErr_Occurred())) __PYX_ERR(0, 626, __pyx_L1_error)
  __pyx_t_4 = mus_sound_framples(__pyx_t_3);
  __pyx_t_5 = __Pyx_PyInt_From_mus_long_t(__pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 626, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_1 = __pyx_t_5;
  __pyx_t_5 = 0;
  __pyx_L3_bool_binop_done:;
  __pyx_v_length = __pyx_t_1;
  __pyx_t_1 = 0;
+0627:     chans = csndlib.mus_sound_chans(filename)
  __pyx_t_6 = __Pyx_PyObject_AsString(__pyx_v_filename); if (unlikely((!__pyx_t_6) && PyErr_Occurred())) __PYX_ERR(0, 627, __pyx_L1_error)
  __pyx_v_chans = mus_sound_chans(__pyx_t_6);
+0628:     srate = csndlib.mus_sound_srate(filename)
  __pyx_t_7 = __Pyx_PyObject_AsString(__pyx_v_filename); if (unlikely((!__pyx_t_7) && PyErr_Occurred())) __PYX_ERR(0, 628, __pyx_L1_error)
  __pyx_v_srate = mus_sound_srate(__pyx_t_7);
+0629:     bg = beg or 0
  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_beg); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 629, __pyx_L1_error)
  if (!__pyx_t_2) {
  } else {
    __Pyx_INCREF(__pyx_v_beg);
    __pyx_t_1 = __pyx_v_beg;
    goto __pyx_L5_bool_binop_done;
  }
  __pyx_t_5 = __Pyx_PyInt_From_long(0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 629, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_1 = __pyx_t_5;
  __pyx_t_5 = 0;
  __pyx_L5_bool_binop_done:;
  __pyx_v_bg = __pyx_t_1;
  __pyx_t_1 = 0;
+0630:     out = np.zeros((1 if (channel != None) else chans, length), dtype=np.double)
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 630, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_zeros); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 630, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_8 = PyObject_RichCompare(__pyx_v_channel, Py_None, Py_NE); __Pyx_XGOTREF(__pyx_t_8); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 630, __pyx_L1_error)
  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_8); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 630, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  if (__pyx_t_2) {
    __Pyx_INCREF(__pyx_int_1);
    __pyx_t_1 = __pyx_int_1;
  } else {
    __pyx_t_8 = __Pyx_PyInt_From_int(__pyx_v_chans); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 630, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __pyx_t_1 = __pyx_t_8;
    __pyx_t_8 = 0;
  }
  __pyx_t_8 = PyTuple_New(2); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 630, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_1);
  __Pyx_INCREF(__pyx_v_length);
  __Pyx_GIVEREF(__pyx_v_length);
  PyTuple_SET_ITEM(__pyx_t_8, 1, __pyx_v_length);
  __pyx_t_1 = 0;
  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 630, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_8);
  PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_8);
  __pyx_t_8 = 0;
  __pyx_t_8 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 630, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_np); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 630, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_double); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 630, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_10);
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  if (PyDict_SetItem(__pyx_t_8, __pyx_n_s_dtype, __pyx_t_10) < 0) __PYX_ERR(0, 630, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
  __pyx_t_10 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_1, __pyx_t_8); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 630, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_10);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __pyx_v_out = __pyx_t_10;
  __pyx_t_10 = 0;
 0631: 
+0632:     cdef double [: , :] arr_view = out
  __pyx_t_11 = __Pyx_PyObject_to_MemoryviewSlice_dsds_double(__pyx_v_out, PyBUF_WRITABLE); if (unlikely(!__pyx_t_11.memview)) __PYX_ERR(0, 632, __pyx_L1_error)
  __pyx_v_arr_view = __pyx_t_11;
  __pyx_t_11.memview = NULL;
  __pyx_t_11.data = NULL;
 0633: 
+0634:     if not channel:
  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_channel); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 634, __pyx_L1_error)
  __pyx_t_12 = (!__pyx_t_2);
  if (__pyx_t_12) {
/* … */
    goto __pyx_L7;
  }
+0635:         for i in range(chans):
    __pyx_t_13 = __pyx_v_chans;
    __pyx_t_14 = __pyx_t_13;
    for (__pyx_t_15 = 0; __pyx_t_15 < __pyx_t_14; __pyx_t_15+=1) {
      __pyx_v_i = __pyx_t_15;
+0636:             csndlib.mus_file_to_array(filename, i, bg, length, &arr_view[0][i])
      __pyx_t_16 = __Pyx_PyObject_AsString(__pyx_v_filename); if (unlikely((!__pyx_t_16) && PyErr_Occurred())) __PYX_ERR(0, 636, __pyx_L1_error)
      __pyx_t_4 = __Pyx_PyInt_As_mus_long_t(__pyx_v_bg); if (unlikely((__pyx_t_4 == ((mus_long_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 636, __pyx_L1_error)
      __pyx_t_17 = __Pyx_PyInt_As_mus_long_t(__pyx_v_length); if (unlikely((__pyx_t_17 == ((mus_long_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 636, __pyx_L1_error)
      __pyx_t_18 = 0;
      __pyx_t_19 = __pyx_v_i;
      __pyx_t_20 = -1;
      if (__pyx_t_18 < 0) {
        __pyx_t_18 += __pyx_v_arr_view.shape[0];
        if (unlikely(__pyx_t_18 < 0)) __pyx_t_20 = 0;
      } else if (unlikely(__pyx_t_18 >= __pyx_v_arr_view.shape[0])) __pyx_t_20 = 0;
      if (__pyx_t_19 < 0) {
        __pyx_t_19 += __pyx_v_arr_view.shape[1];
        if (unlikely(__pyx_t_19 < 0)) __pyx_t_20 = 1;
      } else if (unlikely(__pyx_t_19 >= __pyx_v_arr_view.shape[1])) __pyx_t_20 = 1;
      if (unlikely(__pyx_t_20 != -1)) {
        __Pyx_RaiseBufferIndexError(__pyx_t_20);
        __PYX_ERR(0, 636, __pyx_L1_error)
      }
      (void)(mus_file_to_array(__pyx_t_16, __pyx_v_i, __pyx_t_4, __pyx_t_17, (&(*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_arr_view.data + __pyx_t_18 * __pyx_v_arr_view.strides[0]) ) + __pyx_t_19 * __pyx_v_arr_view.strides[1]) ))))));
    }
 0637:     else:
+0638:         csndlib.mus_file_to_array(filename,0, bg, length, &arr_view[0][0])
  /*else*/ {
    __pyx_t_16 = __Pyx_PyObject_AsString(__pyx_v_filename); if (unlikely((!__pyx_t_16) && PyErr_Occurred())) __PYX_ERR(0, 638, __pyx_L1_error)
    __pyx_t_17 = __Pyx_PyInt_As_mus_long_t(__pyx_v_bg); if (unlikely((__pyx_t_17 == ((mus_long_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 638, __pyx_L1_error)
    __pyx_t_4 = __Pyx_PyInt_As_mus_long_t(__pyx_v_length); if (unlikely((__pyx_t_4 == ((mus_long_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 638, __pyx_L1_error)
    __pyx_t_19 = 0;
    __pyx_t_18 = 0;
    __pyx_t_13 = -1;
    if (__pyx_t_19 < 0) {
      __pyx_t_19 += __pyx_v_arr_view.shape[0];
      if (unlikely(__pyx_t_19 < 0)) __pyx_t_13 = 0;
    } else if (unlikely(__pyx_t_19 >= __pyx_v_arr_view.shape[0])) __pyx_t_13 = 0;
    if (__pyx_t_18 < 0) {
      __pyx_t_18 += __pyx_v_arr_view.shape[1];
      if (unlikely(__pyx_t_18 < 0)) __pyx_t_13 = 1;
    } else if (unlikely(__pyx_t_18 >= __pyx_v_arr_view.shape[1])) __pyx_t_13 = 1;
    if (unlikely(__pyx_t_13 != -1)) {
      __Pyx_RaiseBufferIndexError(__pyx_t_13);
      __PYX_ERR(0, 638, __pyx_L1_error)
    }
    (void)(mus_file_to_array(__pyx_t_16, 0, __pyx_t_17, __pyx_t_4, (&(*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_arr_view.data + __pyx_t_19 * __pyx_v_arr_view.strides[0]) ) + __pyx_t_18 * __pyx_v_arr_view.strides[1]) ))))));
  }
  __pyx_L7:;
+0639:     return out, srate
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_10 = __Pyx_PyInt_From_int(__pyx_v_srate); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 639, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_10);
  __pyx_t_8 = PyTuple_New(2); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 639, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_INCREF(__pyx_v_out);
  __Pyx_GIVEREF(__pyx_v_out);
  PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_v_out);
  __Pyx_GIVEREF(__pyx_t_10);
  PyTuple_SET_ITEM(__pyx_t_8, 1, __pyx_t_10);
  __pyx_t_10 = 0;
  __pyx_r = __pyx_t_8;
  __pyx_t_8 = 0;
  goto __pyx_L0;
 0640: 
+0641: cpdef ndarray2file(filename: str, arr: npt.NDArray[np.float64], length=None, sr=None, sample_type: Optional[sndlib.sample]=CLM.sample_type, header_type: Optional[sndlib.header]=CLM.header_type, comment=None ):
static PyObject *__pyx_pw_8pysndlib_3clm_9ndarray2file(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyObject *__pyx_f_8pysndlib_3clm_ndarray2file(PyObject *__pyx_v_filename, PyObject *__pyx_v_arr, CYTHON_UNUSED int __pyx_skip_dispatch, struct __pyx_opt_args_8pysndlib_3clm_ndarray2file *__pyx_optional_args) {
  PyObject *__pyx_v_length = ((PyObject *)Py_None);
  PyObject *__pyx_v_sr = ((PyObject *)Py_None);
  PyObject *__pyx_v_sample_type = __pyx_k__18;
  PyObject *__pyx_v_header_type = __pyx_k__19;
  PyObject *__pyx_v_chans = NULL;
  int __pyx_v_fd;
  mus_float_t **__pyx_v_obuf;
  __Pyx_memviewslice __pyx_v_arr_view = { 0, 0, { 0 }, { 0 }, { 0 } };
  PyObject *__pyx_v_i = NULL;
  CYTHON_UNUSED int __pyx_v_err;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("ndarray2file", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_length = __pyx_optional_args->length;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_sr = __pyx_optional_args->sr;
        if (__pyx_optional_args->__pyx_n > 2) {
          __pyx_v_sample_type = __pyx_optional_args->sample_type;
          if (__pyx_optional_args->__pyx_n > 3) {
            __pyx_v_header_type = __pyx_optional_args->header_type;
          }
        }
      }
    }
  }
  __Pyx_INCREF(__pyx_v_length);
  __Pyx_INCREF(__pyx_v_sr);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_7);
  __PYX_XCLEAR_MEMVIEW(&__pyx_t_13, 1);
  __Pyx_AddTraceback("pysndlib.clm.ndarray2file", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_chans);
  __PYX_XCLEAR_MEMVIEW(&__pyx_v_arr_view, 1);
  __Pyx_XDECREF(__pyx_v_i);
  __Pyx_XDECREF(__pyx_v_length);
  __Pyx_XDECREF(__pyx_v_sr);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_9ndarray2file(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_8ndarray2file, "\n    write an ndarray of samples to file\n    \n    :param filename: name of file\n    :param arr: np.ndarray of samples\n    :param length: length of samples to write. if None write all\n    :param sr: sample rate of file to write\n    :param sample_type: type of sample type to use. defaults to clm.sample_type\n    :param header_type: header of sample type to use. defaults to clm.header_type\n    :return: length in samples of file\n    :rtype: int\n    \n    \n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_9ndarray2file = {"ndarray2file", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_9ndarray2file, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_8ndarray2file};
static PyObject *__pyx_pw_8pysndlib_3clm_9ndarray2file(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_filename = 0;
  PyObject *__pyx_v_arr = 0;
  PyObject *__pyx_v_length = 0;
  PyObject *__pyx_v_sr = 0;
  PyObject *__pyx_v_sample_type = 0;
  PyObject *__pyx_v_header_type = 0;
  PyObject *__pyx_v_comment = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("ndarray2file (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_filename,&__pyx_n_s_arr,&__pyx_n_s_length,&__pyx_n_s_sr,&__pyx_n_s_sample_type,&__pyx_n_s_header_type,&__pyx_n_s_comment,0};
    PyObject* values[7] = {0,0,0,0,0,0,0};
    values[2] = ((PyObject *)Py_None);
    values[3] = ((PyObject *)Py_None);
    values[4] = __pyx_k__18;
    values[5] = __pyx_k__19;
    values[6] = ((PyObject *)Py_None);
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  7: values[6] = __Pyx_Arg_FASTCALL(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = __Pyx_Arg_FASTCALL(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = __Pyx_Arg_FASTCALL(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_filename)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 641, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_arr)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 641, __pyx_L3_error)
        else {
          __Pyx_RaiseArgtupleInvalid("ndarray2file", 0, 2, 7, 1); __PYX_ERR(0, 641, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_length);
          if (value) { values[2] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 641, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_sr);
          if (value) { values[3] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 641, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_sample_type);
          if (value) { values[4] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 641, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  5:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_header_type);
          if (value) { values[5] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 641, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  6:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_comment);
          if (value) { values[6] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 641, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "ndarray2file") < 0)) __PYX_ERR(0, 641, __pyx_L3_error)
      }
    } else {
      switch (__pyx_nargs) {
        case  7: values[6] = __Pyx_Arg_FASTCALL(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = __Pyx_Arg_FASTCALL(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = __Pyx_Arg_FASTCALL(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_filename = ((PyObject*)values[0]);
    __pyx_v_arr = values[1];
    __pyx_v_length = values[2];
    __pyx_v_sr = values[3];
    __pyx_v_sample_type = values[4];
    __pyx_v_header_type = values[5];
    __pyx_v_comment = values[6];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("ndarray2file", 0, 2, 7, __pyx_nargs); __PYX_ERR(0, 641, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.ndarray2file", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_filename), (&PyString_Type), 0, "filename", 1))) __PYX_ERR(0, 641, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pysndlib_3clm_8ndarray2file(__pyx_self, __pyx_v_filename, __pyx_v_arr, __pyx_v_length, __pyx_v_sr, __pyx_v_sample_type, __pyx_v_header_type, __pyx_v_comment);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_8ndarray2file(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_filename, PyObject *__pyx_v_arr, PyObject *__pyx_v_length, PyObject *__pyx_v_sr, PyObject *__pyx_v_sample_type, PyObject *__pyx_v_header_type, PyObject *__pyx_v_comment) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("ndarray2file", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2.__pyx_n = 5;
  __pyx_t_2.length = __pyx_v_length;
  __pyx_t_2.sr = __pyx_v_sr;
  __pyx_t_2.sample_type = __pyx_v_sample_type;
  __pyx_t_2.header_type = __pyx_v_header_type;
  __pyx_t_2.comment = __pyx_v_comment;
  __pyx_t_1 = __pyx_f_8pysndlib_3clm_ndarray2file(__pyx_v_filename, __pyx_v_arr, 0, &__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 641, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pysndlib.clm.ndarray2file", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __Pyx_GetModuleGlobalName(__pyx_t_41, __pyx_n_s_CLM); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 641, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  __pyx_t_40 = __Pyx_PyObject_GetAttrStr(__pyx_t_41, __pyx_n_s_sample_type); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 641, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
  __pyx_k__18 = __pyx_t_40;
  __Pyx_GIVEREF(__pyx_t_40);
  __pyx_t_40 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_40, __pyx_n_s_CLM); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 641, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  __pyx_t_41 = __Pyx_PyObject_GetAttrStr(__pyx_t_40, __pyx_n_s_header_type); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 641, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
  __pyx_k__19 = __pyx_t_41;
  __Pyx_GIVEREF(__pyx_t_41);
  __pyx_t_41 = 0;
/* … */
  __pyx_tuple__116 = PyTuple_Pack(7, __pyx_n_s_filename, __pyx_n_s_arr, __pyx_n_s_length, __pyx_n_s_sr, __pyx_n_s_sample_type, __pyx_n_s_header_type, __pyx_n_s_comment); if (unlikely(!__pyx_tuple__116)) __PYX_ERR(0, 641, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__116);
  __Pyx_GIVEREF(__pyx_tuple__116);
  __Pyx_GetModuleGlobalName(__pyx_t_41, __pyx_n_s_CLM); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 641, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  __pyx_t_40 = __Pyx_PyObject_GetAttrStr(__pyx_t_41, __pyx_n_s_sample_type); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 641, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_41, __pyx_n_s_CLM); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 641, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  __pyx_t_37 = __Pyx_PyObject_GetAttrStr(__pyx_t_41, __pyx_n_s_header_type); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 641, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
  __pyx_t_41 = PyTuple_New(5); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 641, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  PyTuple_SET_ITEM(__pyx_t_41, 0, Py_None);
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  PyTuple_SET_ITEM(__pyx_t_41, 1, Py_None);
  __Pyx_GIVEREF(__pyx_t_40);
  PyTuple_SET_ITEM(__pyx_t_41, 2, __pyx_t_40);
  __Pyx_GIVEREF(__pyx_t_37);
  PyTuple_SET_ITEM(__pyx_t_41, 3, __pyx_t_37);
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  PyTuple_SET_ITEM(__pyx_t_41, 4, Py_None);
  __pyx_t_40 = 0;
  __pyx_t_37 = 0;
  __pyx_t_37 = __Pyx_PyDict_NewPresized(4); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 641, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  if (PyDict_SetItem(__pyx_t_37, __pyx_n_s_filename, __pyx_n_s_str_2) < 0) __PYX_ERR(0, 641, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_37, __pyx_n_s_arr, __pyx_kp_s_npt_NDArray_np_float64) < 0) __PYX_ERR(0, 641, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_37, __pyx_n_s_sample_type, __pyx_kp_s_Optional_sndlib_sample) < 0) __PYX_ERR(0, 641, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_37, __pyx_n_s_header_type, __pyx_kp_s_Optional_sndlib_header) < 0) __PYX_ERR(0, 641, __pyx_L1_error)
  __pyx_t_40 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_9ndarray2file, 0, __pyx_n_s_ndarray2file, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__117)); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 641, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_40, __pyx_t_41);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_40, __pyx_t_37);
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_ndarray2file, __pyx_t_40) < 0) __PYX_ERR(0, 641, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
  __pyx_codeobj__117 = (PyObject*)__Pyx_PyCode_New(7, 0, 0, 7, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__116, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_ndarray2file, 641, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__117)) __PYX_ERR(0, 641, __pyx_L1_error)
/* … */
struct __pyx_opt_args_8pysndlib_3clm_ndarray2file {
  int __pyx_n;
  PyObject *length;
  PyObject *sr;
  PyObject *sample_type;
  PyObject *header_type;
  PyObject *comment;
};
 0642:     """
 0643:     write an ndarray of samples to file
 0644:     
 0645:     :param filename: name of file
 0646:     :param arr: np.ndarray of samples
 0647:     :param length: length of samples to write. if None write all
 0648:     :param sr: sample rate of file to write
 0649:     :param sample_type: type of sample type to use. defaults to clm.sample_type
 0650:     :param header_type: header of sample type to use. defaults to clm.header_type
 0651:     :return: length in samples of file
 0652:     :rtype: int
 0653:     
 0654:     
 0655:     """
 0656: 
+0657:     if not sr:
  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_sr); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 657, __pyx_L1_error)
  __pyx_t_2 = (!__pyx_t_1);
  if (__pyx_t_2) {
/* … */
  }
+0658:         sr = CLM.srate
    __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_CLM); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 658, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_srate); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 658, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF_SET(__pyx_v_sr, __pyx_t_4);
    __pyx_t_4 = 0;
 0659: 
+0660:     chans = np.shape(arr)[0]
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 660, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_shape); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 660, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = NULL;
  __pyx_t_6 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_5);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_5, function);
      __pyx_t_6 = 1;
    }
  }
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_v_arr};
    __pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_5, __pyx_callargs+1-__pyx_t_6, 1+__pyx_t_6);
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 660, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  }
  __pyx_t_5 = __Pyx_GetItemInt(__pyx_t_4, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 660, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_v_chans = __pyx_t_5;
  __pyx_t_5 = 0;
+0661:     length = length or np.shape(arr)[1]
  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_length); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 661, __pyx_L1_error)
  if (!__pyx_t_2) {
  } else {
    __Pyx_INCREF(__pyx_v_length);
    __pyx_t_5 = __pyx_v_length;
    goto __pyx_L4_bool_binop_done;
  }
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 661, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_shape); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 661, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = NULL;
  __pyx_t_6 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_7))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_7);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_7, function);
      __pyx_t_6 = 1;
    }
  }
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_v_arr};
    __pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_7, __pyx_callargs+1-__pyx_t_6, 1+__pyx_t_6);
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 661, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  }
  __pyx_t_7 = __Pyx_GetItemInt(__pyx_t_4, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 661, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_INCREF(__pyx_t_7);
  __pyx_t_5 = __pyx_t_7;
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  __pyx_L4_bool_binop_done:;
  __Pyx_DECREF_SET(__pyx_v_length, __pyx_t_5);
  __pyx_t_5 = 0;
+0662:     fd = csndlib.mus_sound_open_output(filename, int(sr), chans, sample_type, header_type, NULL)
  __pyx_t_8 = __Pyx_PyObject_AsString(__pyx_v_filename); if (unlikely((!__pyx_t_8) && PyErr_Occurred())) __PYX_ERR(0, 662, __pyx_L1_error)
  __pyx_t_5 = __Pyx_PyNumber_Int(__pyx_v_sr); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 662, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_6 = __Pyx_PyInt_As_int(__pyx_t_5); if (unlikely((__pyx_t_6 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 662, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_9 = __Pyx_PyInt_As_int(__pyx_v_chans); if (unlikely((__pyx_t_9 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 662, __pyx_L1_error)
  __pyx_t_10 = __pyx_PyFloat_AsDouble(__pyx_v_sample_type); if (unlikely((__pyx_t_10 == ((mus_sample_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 662, __pyx_L1_error)
  __pyx_t_11 = __Pyx_PyInt_As_mus_header_t(__pyx_v_header_type); if (unlikely((__pyx_t_11 == ((mus_header_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 662, __pyx_L1_error)
  __pyx_v_fd = mus_sound_open_output(__pyx_t_8, __pyx_t_6, __pyx_t_9, __pyx_t_10, __pyx_t_11, NULL);
 0663: 
+0664:     cdef cclm.mus_float_t **obuf = <cclm.mus_float_t**>PyMem_Malloc(chans * sizeof(cclm.mus_float_t*))
  __pyx_t_5 = __Pyx_PyInt_FromSize_t((sizeof(mus_float_t *))); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 664, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_7 = PyNumber_Multiply(__pyx_v_chans, __pyx_t_5); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 664, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_12 = __Pyx_PyInt_As_size_t(__pyx_t_7); if (unlikely((__pyx_t_12 == (size_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 664, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  __pyx_v_obuf = ((mus_float_t **)PyMem_Malloc(__pyx_t_12));
 0665: 
+0666:     if not obuf:
  __pyx_t_2 = (!(__pyx_v_obuf != 0));
  if (unlikely(__pyx_t_2)) {
/* … */
  }
+0667:         raise MemoryError()
    PyErr_NoMemory(); __PYX_ERR(0, 667, __pyx_L1_error)
 0668: 
+0669:     cdef double [:] arr_view = arr[0]
  __pyx_t_7 = __Pyx_GetItemInt(__pyx_v_arr, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 669, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __pyx_t_13 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_t_7, PyBUF_WRITABLE); if (unlikely(!__pyx_t_13.memview)) __PYX_ERR(0, 669, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  __pyx_v_arr_view = __pyx_t_13;
  __pyx_t_13.memview = NULL;
  __pyx_t_13.data = NULL;
 0670: 
+0671:     try:
  /*try:*/ {
+0672:         for i in range(chans):
    __pyx_t_7 = __Pyx_PyObject_CallOneArg(__pyx_builtin_range, __pyx_v_chans); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 672, __pyx_L8_error)
    __Pyx_GOTREF(__pyx_t_7);
    if (likely(PyList_CheckExact(__pyx_t_7)) || PyTuple_CheckExact(__pyx_t_7)) {
      __pyx_t_5 = __pyx_t_7; __Pyx_INCREF(__pyx_t_5); __pyx_t_14 = 0;
      __pyx_t_15 = NULL;
    } else {
      __pyx_t_14 = -1; __pyx_t_5 = PyObject_GetIter(__pyx_t_7); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 672, __pyx_L8_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_15 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_5); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 672, __pyx_L8_error)
    }
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    for (;;) {
      if (likely(!__pyx_t_15)) {
        if (likely(PyList_CheckExact(__pyx_t_5))) {
          if (__pyx_t_14 >= PyList_GET_SIZE(__pyx_t_5)) break;
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_7 = PyList_GET_ITEM(__pyx_t_5, __pyx_t_14); __Pyx_INCREF(__pyx_t_7); __pyx_t_14++; if (unlikely((0 < 0))) __PYX_ERR(0, 672, __pyx_L8_error)
          #else
          __pyx_t_7 = PySequence_ITEM(__pyx_t_5, __pyx_t_14); __pyx_t_14++; if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 672, __pyx_L8_error)
          __Pyx_GOTREF(__pyx_t_7);
          #endif
        } else {
          if (__pyx_t_14 >= PyTuple_GET_SIZE(__pyx_t_5)) break;
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_7 = PyTuple_GET_ITEM(__pyx_t_5, __pyx_t_14); __Pyx_INCREF(__pyx_t_7); __pyx_t_14++; if (unlikely((0 < 0))) __PYX_ERR(0, 672, __pyx_L8_error)
          #else
          __pyx_t_7 = PySequence_ITEM(__pyx_t_5, __pyx_t_14); __pyx_t_14++; if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 672, __pyx_L8_error)
          __Pyx_GOTREF(__pyx_t_7);
          #endif
        }
      } else {
        __pyx_t_7 = __pyx_t_15(__pyx_t_5);
        if (unlikely(!__pyx_t_7)) {
          PyObject* exc_type = PyErr_Occurred();
          if (exc_type) {
            if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
            else __PYX_ERR(0, 672, __pyx_L8_error)
          }
          break;
        }
        __Pyx_GOTREF(__pyx_t_7);
      }
      __Pyx_XDECREF_SET(__pyx_v_i, __pyx_t_7);
      __pyx_t_7 = 0;
/* … */
    }
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  }
+0673:             arr_view = arr[i]
      __pyx_t_7 = __Pyx_PyObject_GetItem(__pyx_v_arr, __pyx_v_i); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 673, __pyx_L8_error)
      __Pyx_GOTREF(__pyx_t_7);
      __pyx_t_13 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_t_7, PyBUF_WRITABLE); if (unlikely(!__pyx_t_13.memview)) __PYX_ERR(0, 673, __pyx_L8_error)
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      __PYX_XCLEAR_MEMVIEW(&__pyx_v_arr_view, 1);
      __pyx_v_arr_view = __pyx_t_13;
      __pyx_t_13.memview = NULL;
      __pyx_t_13.data = NULL;
+0674:             obuf[i] = &arr_view[0]
      __pyx_t_16 = 0;
      __pyx_t_9 = -1;
      if (__pyx_t_16 < 0) {
        __pyx_t_16 += __pyx_v_arr_view.shape[0];
        if (unlikely(__pyx_t_16 < 0)) __pyx_t_9 = 0;
      } else if (unlikely(__pyx_t_16 >= __pyx_v_arr_view.shape[0])) __pyx_t_9 = 0;
      if (unlikely(__pyx_t_9 != -1)) {
        __Pyx_RaiseBufferIndexError(__pyx_t_9);
        __PYX_ERR(0, 674, __pyx_L8_error)
      }
      __pyx_t_17 = __Pyx_PyIndex_AsSsize_t(__pyx_v_i); if (unlikely((__pyx_t_17 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 674, __pyx_L8_error)
      (__pyx_v_obuf[__pyx_t_17]) = (&(*((double *) ( /* dim=0 */ (__pyx_v_arr_view.data + __pyx_t_16 * __pyx_v_arr_view.strides[0]) ))));
 0675: 
 0676:     finally:
+0677:         err = csndlib.mus_file_write(fd, 0, length, chans, obuf)
  /*finally:*/ {
    /*normal exit:*/{
      __pyx_t_18 = __Pyx_PyInt_As_mus_long_t(__pyx_v_length); if (unlikely((__pyx_t_18 == ((mus_long_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 677, __pyx_L1_error)
      __pyx_t_9 = __Pyx_PyInt_As_int(__pyx_v_chans); if (unlikely((__pyx_t_9 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 677, __pyx_L1_error)
      __pyx_v_err = mus_file_write(__pyx_v_fd, 0, __pyx_t_18, __pyx_t_9, __pyx_v_obuf);
/* … */
        __pyx_t_18 = __Pyx_PyInt_As_mus_long_t(__pyx_v_length); if (unlikely((__pyx_t_18 == ((mus_long_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 677, __pyx_L14_error)
        __pyx_t_26 = __Pyx_PyInt_As_int(__pyx_v_chans); if (unlikely((__pyx_t_26 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 677, __pyx_L14_error)
        __pyx_v_err = mus_file_write(__pyx_v_fd, 0, __pyx_t_18, __pyx_t_26, __pyx_v_obuf);
+0678:         csndlib.mus_sound_close_output(fd, length * csndlib.mus_bytes_per_sample(sample_type)*chans)
      __pyx_t_10 = __pyx_PyFloat_AsDouble(__pyx_v_sample_type); if (unlikely((__pyx_t_10 == ((mus_sample_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 678, __pyx_L1_error)
      __pyx_t_5 = __Pyx_PyInt_From_int(mus_bytes_per_sample(__pyx_t_10)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 678, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_7 = PyNumber_Multiply(__pyx_v_length, __pyx_t_5); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 678, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __pyx_t_5 = PyNumber_Multiply(__pyx_t_7, __pyx_v_chans); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 678, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      __pyx_t_18 = __Pyx_PyInt_As_mus_long_t(__pyx_t_5); if (unlikely((__pyx_t_18 == ((mus_long_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 678, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      (void)(mus_sound_close_output(__pyx_v_fd, __pyx_t_18));
/* … */
        __pyx_t_10 = __pyx_PyFloat_AsDouble(__pyx_v_sample_type); if (unlikely((__pyx_t_10 == ((mus_sample_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 678, __pyx_L14_error)
        __pyx_t_5 = __Pyx_PyInt_From_int(mus_bytes_per_sample(__pyx_t_10)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 678, __pyx_L14_error)
        __Pyx_GOTREF(__pyx_t_5);
        __pyx_t_7 = PyNumber_Multiply(__pyx_v_length, __pyx_t_5); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 678, __pyx_L14_error)
        __Pyx_GOTREF(__pyx_t_7);
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
        __pyx_t_5 = PyNumber_Multiply(__pyx_t_7, __pyx_v_chans); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 678, __pyx_L14_error)
        __Pyx_GOTREF(__pyx_t_5);
        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
        __pyx_t_18 = __Pyx_PyInt_As_mus_long_t(__pyx_t_5); if (unlikely((__pyx_t_18 == ((mus_long_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 678, __pyx_L14_error)
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
        (void)(mus_sound_close_output(__pyx_v_fd, __pyx_t_18));
+0679:         PyMem_Free(obuf)
      PyMem_Free(__pyx_v_obuf);
      goto __pyx_L9;
    }
    __pyx_L8_error:;
    /*exception exit:*/{
      __Pyx_PyThreadState_declare
      __Pyx_PyThreadState_assign
      __pyx_t_20 = 0; __pyx_t_21 = 0; __pyx_t_22 = 0; __pyx_t_23 = 0; __pyx_t_24 = 0; __pyx_t_25 = 0;
      __PYX_XCLEAR_MEMVIEW(&__pyx_t_13, 1);
      __pyx_t_13.memview = NULL; __pyx_t_13.data = NULL;
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
      if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_23, &__pyx_t_24, &__pyx_t_25);
      if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_20, &__pyx_t_21, &__pyx_t_22) < 0)) __Pyx_ErrFetch(&__pyx_t_20, &__pyx_t_21, &__pyx_t_22);
      __Pyx_XGOTREF(__pyx_t_20);
      __Pyx_XGOTREF(__pyx_t_21);
      __Pyx_XGOTREF(__pyx_t_22);
      __Pyx_XGOTREF(__pyx_t_23);
      __Pyx_XGOTREF(__pyx_t_24);
      __Pyx_XGOTREF(__pyx_t_25);
      __pyx_t_9 = __pyx_lineno; __pyx_t_6 = __pyx_clineno; __pyx_t_19 = __pyx_filename;
      {
/* … */
        PyMem_Free(__pyx_v_obuf);
      }
      if (PY_MAJOR_VERSION >= 3) {
        __Pyx_XGIVEREF(__pyx_t_23);
        __Pyx_XGIVEREF(__pyx_t_24);
        __Pyx_XGIVEREF(__pyx_t_25);
        __Pyx_ExceptionReset(__pyx_t_23, __pyx_t_24, __pyx_t_25);
      }
      __Pyx_XGIVEREF(__pyx_t_20);
      __Pyx_XGIVEREF(__pyx_t_21);
      __Pyx_XGIVEREF(__pyx_t_22);
      __Pyx_ErrRestore(__pyx_t_20, __pyx_t_21, __pyx_t_22);
      __pyx_t_20 = 0; __pyx_t_21 = 0; __pyx_t_22 = 0; __pyx_t_23 = 0; __pyx_t_24 = 0; __pyx_t_25 = 0;
      __pyx_lineno = __pyx_t_9; __pyx_clineno = __pyx_t_6; __pyx_filename = __pyx_t_19;
      goto __pyx_L1_error;
      __pyx_L14_error:;
      if (PY_MAJOR_VERSION >= 3) {
        __Pyx_XGIVEREF(__pyx_t_23);
        __Pyx_XGIVEREF(__pyx_t_24);
        __Pyx_XGIVEREF(__pyx_t_25);
        __Pyx_ExceptionReset(__pyx_t_23, __pyx_t_24, __pyx_t_25);
      }
      __Pyx_XDECREF(__pyx_t_20); __pyx_t_20 = 0;
      __Pyx_XDECREF(__pyx_t_21); __pyx_t_21 = 0;
      __Pyx_XDECREF(__pyx_t_22); __pyx_t_22 = 0;
      __pyx_t_23 = 0; __pyx_t_24 = 0; __pyx_t_25 = 0;
      goto __pyx_L1_error;
    }
    __pyx_L9:;
  }
 0680: 
+0681:     return length
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_length);
  __pyx_r = __pyx_v_length;
  goto __pyx_L0;
 0682: 
 0683: # --------------- with sound context manager ---------------- #      
+0684: class Sound(object):
  __pyx_tuple__118 = PyTuple_Pack(1, __pyx_builtin_object); if (unlikely(!__pyx_tuple__118)) __PYX_ERR(0, 684, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__118);
  __Pyx_GIVEREF(__pyx_tuple__118);
/* … */
  __pyx_t_40 = __Pyx_PEP560_update_bases(__pyx_tuple__119); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 684, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  __pyx_t_37 = __Pyx_CalculateMetaclass(NULL, __pyx_t_40); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 684, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  __pyx_t_41 = __Pyx_Py3MetaclassPrepare(__pyx_t_37, __pyx_t_40, __pyx_n_s_Sound, __pyx_n_s_Sound, (PyObject *) NULL, __pyx_n_s_pysndlib_clm, __pyx_kp_s_context_manager_which_handles_c); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 684, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  if (__pyx_t_40 != __pyx_tuple__119) {
    if (unlikely((PyDict_SetItemString(__pyx_t_41, "__orig_bases__", __pyx_tuple__119) < 0))) __PYX_ERR(0, 684, __pyx_L1_error)
  }
  __pyx_tuple__119 = PyTuple_Pack(1, __pyx_builtin_object); if (unlikely(!__pyx_tuple__119)) __PYX_ERR(0, 684, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__119);
  __Pyx_GIVEREF(__pyx_tuple__119);
/* … */
  __pyx_t_43 = __Pyx_Py3ClassCreate(__pyx_t_37, __pyx_n_s_Sound, __pyx_t_40, __pyx_t_41, NULL, 0, 0); if (unlikely(!__pyx_t_43)) __PYX_ERR(0, 684, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_43);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_Sound, __pyx_t_43) < 0) __PYX_ERR(0, 684, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_43); __pyx_t_43 = 0;
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
 0685:     """
 0686:     context manager which handles creating output and other options
 0687:     
 0688:     :param output: Can be a filename string or np.ndarray
 0689:     :param channels: number of channels \in main output
 0690:     :param srate:  output sampling rate 
 0691:     :param sample_type: output sample data type
 0692:     :param header_type: output header type 
 0693:     :param comment: any comment to store \in the header
 0694:     :param verbose: if True, print out some info (doesn't do anything now)
 0695:     :param reverb: reverb instrument
 0696:     :param reverb_data: arguments passed to the reverb (dictionary)
 0697:     :param reverb_channels: chans \in the reverb intermediate file
 0698:     :param revfile: reverb intermediate output file name
 0699:     :param continue_old_file: if True, continue a previous computation
 0700:     :param statistics: if True, print info at end of with-sound (compile time, maxamps)
 0701:     :param scaled_to: if a number, scale the output to peak at that amp
 0702:     :param scaled_by: is a number, scale output by that amp
 0703:     :param play: if True, play the sound automatically
 0704:     :param finalize: a function to call on exit from the context. should be a function that takes one argument, the name of the sound file or the ndarray 
 0705:         used as output
 0706:     """
 0707: 
+0708:     def __init__(self, output=None,
/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_5Sound_1__init__(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_8pysndlib_3clm_5Sound_1__init__ = {"__init__", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_5Sound_1__init__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_8pysndlib_3clm_5Sound_1__init__(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_self = 0;
  PyObject *__pyx_v_output = 0;
  PyObject *__pyx_v_channels = 0;
  PyObject *__pyx_v_srate = 0;
  PyObject *__pyx_v_sample_type = 0;
  PyObject *__pyx_v_header_type = 0;
  PyObject *__pyx_v_comment = 0;
  PyObject *__pyx_v_verbose = 0;
  PyObject *__pyx_v_reverb = 0;
  PyObject *__pyx_v_revfile = 0;
  PyObject *__pyx_v_reverb_data = 0;
  PyObject *__pyx_v_reverb_channels = 0;
  PyObject *__pyx_v_continue_old_file = 0;
  PyObject *__pyx_v_statistics = 0;
  PyObject *__pyx_v_scaled_to = 0;
  PyObject *__pyx_v_scaled_by = 0;
  PyObject *__pyx_v_play = 0;
  PyObject *__pyx_v_clipped = 0;
  PyObject *__pyx_v_finalize = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__init__ (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_output,&__pyx_n_s_channels,&__pyx_n_s_srate,&__pyx_n_s_sample_type,&__pyx_n_s_header_type,&__pyx_n_s_comment,&__pyx_n_s_verbose,&__pyx_n_s_reverb,&__pyx_n_s_revfile,&__pyx_n_s_reverb_data,&__pyx_n_s_reverb_channels,&__pyx_n_s_continue_old_file,&__pyx_n_s_statistics,&__pyx_n_s_scaled_to,&__pyx_n_s_scaled_by,&__pyx_n_s_play,&__pyx_n_s_clipped,&__pyx_n_s_finalize,0};
    PyObject* values[19] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
    values[1] = ((PyObject *)((PyObject *)Py_None));
/* … */
  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_5Sound___init__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_output, PyObject *__pyx_v_channels, PyObject *__pyx_v_srate, PyObject *__pyx_v_sample_type, PyObject *__pyx_v_header_type, PyObject *__pyx_v_comment, PyObject *__pyx_v_verbose, PyObject *__pyx_v_reverb, PyObject *__pyx_v_revfile, PyObject *__pyx_v_reverb_data, PyObject *__pyx_v_reverb_channels, PyObject *__pyx_v_continue_old_file, PyObject *__pyx_v_statistics, PyObject *__pyx_v_scaled_to, PyObject *__pyx_v_scaled_by, PyObject *__pyx_v_play, PyObject *__pyx_v_clipped, PyObject *__pyx_v_finalize) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__init__", 0);
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("pysndlib.clm.Sound.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__120 = PyTuple_Pack(19, __pyx_n_s_self, __pyx_n_s_output, __pyx_n_s_channels, __pyx_n_s_srate, __pyx_n_s_sample_type, __pyx_n_s_header_type, __pyx_n_s_comment, __pyx_n_s_verbose, __pyx_n_s_reverb, __pyx_n_s_revfile, __pyx_n_s_reverb_data, __pyx_n_s_reverb_channels, __pyx_n_s_continue_old_file, __pyx_n_s_statistics, __pyx_n_s_scaled_to, __pyx_n_s_scaled_by, __pyx_n_s_play, __pyx_n_s_clipped, __pyx_n_s_finalize); if (unlikely(!__pyx_tuple__120)) __PYX_ERR(0, 708, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__120);
  __Pyx_GIVEREF(__pyx_tuple__120);
  __pyx_codeobj__121 = (PyObject*)__Pyx_PyCode_New(19, 0, 0, 19, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__120, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_init, 708, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__121)) __PYX_ERR(0, 708, __pyx_L1_error)
/* … */
  __pyx_t_43 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_5Sound_1__init__, 0, __pyx_n_s_Sound___init, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__121)); if (unlikely(!__pyx_t_43)) __PYX_ERR(0, 708, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_43);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_43, __pyx_tuple__122);
  if (__Pyx_SetNameInClass(__pyx_t_41, __pyx_n_s_init, __pyx_t_43) < 0) __PYX_ERR(0, 708, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_43); __pyx_t_43 = 0;
  __pyx_tuple__122 = PyTuple_Pack(18, ((PyObject *)Py_None), ((PyObject *)Py_None), ((PyObject *)Py_None), ((PyObject *)Py_None), ((PyObject *)Py_None), ((PyObject *)Py_False), ((PyObject *)Py_False), ((PyObject *)Py_None), ((PyObject *)Py_None), ((PyObject *)Py_None), ((PyObject *)Py_None), ((PyObject *)Py_False), ((PyObject *)Py_None), ((PyObject *)Py_False), ((PyObject *)Py_False), ((PyObject *)Py_None), ((PyObject *)Py_None), ((PyObject *)Py_None)); if (unlikely(!__pyx_tuple__122)) __PYX_ERR(0, 708, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__122);
  __Pyx_GIVEREF(__pyx_tuple__122);
+0709:                         channels=None,
    values[2] = ((PyObject *)((PyObject *)Py_None));
+0710:                         srate=None,
    values[3] = ((PyObject *)((PyObject *)Py_None));
+0711:                         sample_type = None,
    values[4] = ((PyObject *)((PyObject *)Py_None));
+0712:                         header_type = None,
    values[5] = ((PyObject *)((PyObject *)Py_None));
+0713:                         comment = False,
    values[6] = ((PyObject *)((PyObject *)Py_False));
+0714:                         verbose = False,
    values[7] = ((PyObject *)((PyObject *)Py_False));
+0715:                         reverb = None,
    values[8] = ((PyObject *)((PyObject *)Py_None));
+0716:                         revfile = None,
    values[9] = ((PyObject *)((PyObject *)Py_None));
+0717:                         reverb_data = None,
    values[10] = ((PyObject *)((PyObject *)Py_None));
+0718:                         reverb_channels = None,
    values[11] = ((PyObject *)((PyObject *)Py_None));
+0719:                         continue_old_file = False,
    values[12] = ((PyObject *)((PyObject *)Py_False));
+0720:                         statistics = None,
    values[13] = ((PyObject *)((PyObject *)Py_None));
+0721:                         scaled_to = False,
    values[14] = ((PyObject *)((PyObject *)Py_False));
+0722:                         scaled_by = False,
    values[15] = ((PyObject *)((PyObject *)Py_False));
+0723:                         play = None,
    values[16] = ((PyObject *)((PyObject *)Py_None));
+0724:                         clipped = None,
    values[17] = ((PyObject *)((PyObject *)Py_None));
+0725:                         finalize = None):
    values[18] = ((PyObject *)((PyObject *)Py_None));
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case 19: values[18] = __Pyx_Arg_FASTCALL(__pyx_args, 18);
        CYTHON_FALLTHROUGH;
        case 18: values[17] = __Pyx_Arg_FASTCALL(__pyx_args, 17);
        CYTHON_FALLTHROUGH;
        case 17: values[16] = __Pyx_Arg_FASTCALL(__pyx_args, 16);
        CYTHON_FALLTHROUGH;
        case 16: values[15] = __Pyx_Arg_FASTCALL(__pyx_args, 15);
        CYTHON_FALLTHROUGH;
        case 15: values[14] = __Pyx_Arg_FASTCALL(__pyx_args, 14);
        CYTHON_FALLTHROUGH;
        case 14: values[13] = __Pyx_Arg_FASTCALL(__pyx_args, 13);
        CYTHON_FALLTHROUGH;
        case 13: values[12] = __Pyx_Arg_FASTCALL(__pyx_args, 12);
        CYTHON_FALLTHROUGH;
        case 12: values[11] = __Pyx_Arg_FASTCALL(__pyx_args, 11);
        CYTHON_FALLTHROUGH;
        case 11: values[10] = __Pyx_Arg_FASTCALL(__pyx_args, 10);
        CYTHON_FALLTHROUGH;
        case 10: values[9] = __Pyx_Arg_FASTCALL(__pyx_args, 9);
        CYTHON_FALLTHROUGH;
        case  9: values[8] = __Pyx_Arg_FASTCALL(__pyx_args, 8);
        CYTHON_FALLTHROUGH;
        case  8: values[7] = __Pyx_Arg_FASTCALL(__pyx_args, 7);
        CYTHON_FALLTHROUGH;
        case  7: values[6] = __Pyx_Arg_FASTCALL(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = __Pyx_Arg_FASTCALL(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = __Pyx_Arg_FASTCALL(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_self)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 708, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_output);
          if (value) { values[1] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 708, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_channels);
          if (value) { values[2] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 708, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_srate);
          if (value) { values[3] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 708, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_sample_type);
          if (value) { values[4] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 708, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  5:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_header_type);
          if (value) { values[5] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 708, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  6:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_comment);
          if (value) { values[6] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 708, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  7:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_verbose);
          if (value) { values[7] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 708, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  8:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_reverb);
          if (value) { values[8] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 708, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  9:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_revfile);
          if (value) { values[9] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 708, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case 10:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_reverb_data);
          if (value) { values[10] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 708, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case 11:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_reverb_channels);
          if (value) { values[11] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 708, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case 12:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_continue_old_file);
          if (value) { values[12] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 708, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case 13:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_statistics);
          if (value) { values[13] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 708, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case 14:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_scaled_to);
          if (value) { values[14] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 708, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case 15:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_scaled_by);
          if (value) { values[15] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 708, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case 16:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_play);
          if (value) { values[16] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 708, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case 17:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_clipped);
          if (value) { values[17] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 708, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case 18:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_finalize);
          if (value) { values[18] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 708, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "__init__") < 0)) __PYX_ERR(0, 708, __pyx_L3_error)
      }
    } else {
      switch (__pyx_nargs) {
        case 19: values[18] = __Pyx_Arg_FASTCALL(__pyx_args, 18);
        CYTHON_FALLTHROUGH;
        case 18: values[17] = __Pyx_Arg_FASTCALL(__pyx_args, 17);
        CYTHON_FALLTHROUGH;
        case 17: values[16] = __Pyx_Arg_FASTCALL(__pyx_args, 16);
        CYTHON_FALLTHROUGH;
        case 16: values[15] = __Pyx_Arg_FASTCALL(__pyx_args, 15);
        CYTHON_FALLTHROUGH;
        case 15: values[14] = __Pyx_Arg_FASTCALL(__pyx_args, 14);
        CYTHON_FALLTHROUGH;
        case 14: values[13] = __Pyx_Arg_FASTCALL(__pyx_args, 13);
        CYTHON_FALLTHROUGH;
        case 13: values[12] = __Pyx_Arg_FASTCALL(__pyx_args, 12);
        CYTHON_FALLTHROUGH;
        case 12: values[11] = __Pyx_Arg_FASTCALL(__pyx_args, 11);
        CYTHON_FALLTHROUGH;
        case 11: values[10] = __Pyx_Arg_FASTCALL(__pyx_args, 10);
        CYTHON_FALLTHROUGH;
        case 10: values[9] = __Pyx_Arg_FASTCALL(__pyx_args, 9);
        CYTHON_FALLTHROUGH;
        case  9: values[8] = __Pyx_Arg_FASTCALL(__pyx_args, 8);
        CYTHON_FALLTHROUGH;
        case  8: values[7] = __Pyx_Arg_FASTCALL(__pyx_args, 7);
        CYTHON_FALLTHROUGH;
        case  7: values[6] = __Pyx_Arg_FASTCALL(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = __Pyx_Arg_FASTCALL(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = __Pyx_Arg_FASTCALL(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_self = values[0];
    __pyx_v_output = values[1];
    __pyx_v_channels = values[2];
    __pyx_v_srate = values[3];
    __pyx_v_sample_type = values[4];
    __pyx_v_header_type = values[5];
    __pyx_v_comment = values[6];
    __pyx_v_verbose = values[7];
    __pyx_v_reverb = values[8];
    __pyx_v_revfile = values[9];
    __pyx_v_reverb_data = values[10];
    __pyx_v_reverb_channels = values[11];
    __pyx_v_continue_old_file = values[12];
    __pyx_v_statistics = values[13];
    __pyx_v_scaled_to = values[14];
    __pyx_v_scaled_by = values[15];
    __pyx_v_play = values[16];
    __pyx_v_clipped = values[17];
    __pyx_v_finalize = values[18];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__init__", 0, 1, 19, __pyx_nargs); __PYX_ERR(0, 708, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.Sound.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pysndlib_3clm_5Sound___init__(__pyx_self, __pyx_v_self, __pyx_v_output, __pyx_v_channels, __pyx_v_srate, __pyx_v_sample_type, __pyx_v_header_type, __pyx_v_comment, __pyx_v_verbose, __pyx_v_reverb, __pyx_v_revfile, __pyx_v_reverb_data, __pyx_v_reverb_channels, __pyx_v_continue_old_file, __pyx_v_statistics, __pyx_v_scaled_to, __pyx_v_scaled_by, __pyx_v_play, __pyx_v_clipped, __pyx_v_finalize);
+0726:         self.output = output if output is not None else CLM.file_name
  __pyx_t_2 = (__pyx_v_output != Py_None);
  if (__pyx_t_2) {
    __Pyx_INCREF(__pyx_v_output);
    __pyx_t_1 = __pyx_v_output;
  } else {
    __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_CLM); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 726, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_file_name); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 726, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_1 = __pyx_t_4;
    __pyx_t_4 = 0;
  }
  if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_output, __pyx_t_1) < 0) __PYX_ERR(0, 726, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+0727:         self.channels = channels if channels is not None else CLM.channels
  __pyx_t_2 = (__pyx_v_channels != Py_None);
  if (__pyx_t_2) {
    __Pyx_INCREF(__pyx_v_channels);
    __pyx_t_1 = __pyx_v_channels;
  } else {
    __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_CLM); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 727, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_channels); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 727, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_1 = __pyx_t_3;
    __pyx_t_3 = 0;
  }
  if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_channels, __pyx_t_1) < 0) __PYX_ERR(0, 727, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+0728:         self.srate = srate if srate is not None else CLM.srate
  __pyx_t_2 = (__pyx_v_srate != Py_None);
  if (__pyx_t_2) {
    __Pyx_INCREF(__pyx_v_srate);
    __pyx_t_1 = __pyx_v_srate;
  } else {
    __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_CLM); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 728, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_srate); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 728, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_1 = __pyx_t_4;
    __pyx_t_4 = 0;
  }
  if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_srate, __pyx_t_1) < 0) __PYX_ERR(0, 728, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+0729:         self.sample_type = sample_type if sample_type is not None else CLM.sample_type
  __pyx_t_2 = (__pyx_v_sample_type != Py_None);
  if (__pyx_t_2) {
    __Pyx_INCREF(__pyx_v_sample_type);
    __pyx_t_1 = __pyx_v_sample_type;
  } else {
    __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_CLM); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 729, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_sample_type); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 729, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_1 = __pyx_t_3;
    __pyx_t_3 = 0;
  }
  if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_sample_type, __pyx_t_1) < 0) __PYX_ERR(0, 729, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+0730:         self.header_type = header_type if header_type is not None else  CLM.header_type
  __pyx_t_2 = (__pyx_v_header_type != Py_None);
  if (__pyx_t_2) {
    __Pyx_INCREF(__pyx_v_header_type);
    __pyx_t_1 = __pyx_v_header_type;
  } else {
    __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_CLM); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 730, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_header_type); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 730, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_1 = __pyx_t_4;
    __pyx_t_4 = 0;
  }
  if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_header_type, __pyx_t_1) < 0) __PYX_ERR(0, 730, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+0731:         self.comment = comment
  if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_comment, __pyx_v_comment) < 0) __PYX_ERR(0, 731, __pyx_L1_error)
+0732:         self.verbose = verbose if verbose is not None else CLM.verbose
  __pyx_t_2 = (__pyx_v_verbose != Py_None);
  if (__pyx_t_2) {
    __Pyx_INCREF(__pyx_v_verbose);
    __pyx_t_1 = __pyx_v_verbose;
  } else {
    __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_CLM); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 732, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_verbose); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 732, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_1 = __pyx_t_3;
    __pyx_t_3 = 0;
  }
  if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_verbose, __pyx_t_1) < 0) __PYX_ERR(0, 732, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+0733:         self.reverb = reverb
  if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_reverb, __pyx_v_reverb) < 0) __PYX_ERR(0, 733, __pyx_L1_error)
+0734:         self.revfile = revfile if revfile is not None else CLM.reverb_file_name
  __pyx_t_2 = (__pyx_v_revfile != Py_None);
  if (__pyx_t_2) {
    __Pyx_INCREF(__pyx_v_revfile);
    __pyx_t_1 = __pyx_v_revfile;
  } else {
    __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_CLM); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 734, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_reverb_file_name); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 734, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_1 = __pyx_t_4;
    __pyx_t_4 = 0;
  }
  if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_revfile, __pyx_t_1) < 0) __PYX_ERR(0, 734, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+0735:         self.reverb_data = reverb_data if reverb_data is not None else CLM.reverb_data
  __pyx_t_2 = (__pyx_v_reverb_data != Py_None);
  if (__pyx_t_2) {
    __Pyx_INCREF(__pyx_v_reverb_data);
    __pyx_t_1 = __pyx_v_reverb_data;
  } else {
    __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_CLM); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 735, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_reverb_data); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 735, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_1 = __pyx_t_3;
    __pyx_t_3 = 0;
  }
  if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_reverb_data, __pyx_t_1) < 0) __PYX_ERR(0, 735, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+0736:         self.reverb_channels = reverb_channels if reverb_channels is not None else CLM.reverb_channels
  __pyx_t_2 = (__pyx_v_reverb_channels != Py_None);
  if (__pyx_t_2) {
    __Pyx_INCREF(__pyx_v_reverb_channels);
    __pyx_t_1 = __pyx_v_reverb_channels;
  } else {
    __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_CLM); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 736, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_reverb_channels); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 736, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_1 = __pyx_t_4;
    __pyx_t_4 = 0;
  }
  if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_reverb_channels, __pyx_t_1) < 0) __PYX_ERR(0, 736, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+0737:         self.continue_old_file = continue_old_file
  if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_continue_old_file, __pyx_v_continue_old_file) < 0) __PYX_ERR(0, 737, __pyx_L1_error)
+0738:         self.statistics = statistics if statistics is not None else CLM.statistics
  __pyx_t_2 = (__pyx_v_statistics != Py_None);
  if (__pyx_t_2) {
    __Pyx_INCREF(__pyx_v_statistics);
    __pyx_t_1 = __pyx_v_statistics;
  } else {
    __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_CLM); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 738, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_statistics); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 738, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_1 = __pyx_t_3;
    __pyx_t_3 = 0;
  }
  if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_statistics, __pyx_t_1) < 0) __PYX_ERR(0, 738, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+0739:         self.scaled_to = scaled_to
  if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_scaled_to, __pyx_v_scaled_to) < 0) __PYX_ERR(0, 739, __pyx_L1_error)
+0740:         self.scaled_by = scaled_by
  if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_scaled_by, __pyx_v_scaled_by) < 0) __PYX_ERR(0, 740, __pyx_L1_error)
+0741:         self.play = play if play is not None else CLM.play
  __pyx_t_2 = (__pyx_v_play != Py_None);
  if (__pyx_t_2) {
    __Pyx_INCREF(__pyx_v_play);
    __pyx_t_1 = __pyx_v_play;
  } else {
    __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_CLM); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 741, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_play); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 741, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_1 = __pyx_t_4;
    __pyx_t_4 = 0;
  }
  if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_play, __pyx_t_1) < 0) __PYX_ERR(0, 741, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+0742:         self.clipped = clipped if clipped is not None else CLM.clipped
  __pyx_t_2 = (__pyx_v_clipped != Py_None);
  if (__pyx_t_2) {
    __Pyx_INCREF(__pyx_v_clipped);
    __pyx_t_1 = __pyx_v_clipped;
  } else {
    __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_CLM); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 742, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_clipped); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 742, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_1 = __pyx_t_3;
    __pyx_t_3 = 0;
  }
  if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_clipped, __pyx_t_1) < 0) __PYX_ERR(0, 742, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+0743:         self.output_to_file = isinstance(self.output, str)
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_output); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 743, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = PyString_Check(__pyx_t_1); 
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyBool_FromLong(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 743, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_output_to_file, __pyx_t_1) < 0) __PYX_ERR(0, 743, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+0744:         self.reverb_to_file = self.reverb is not None and isinstance(self.output, str)
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_reverb); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 744, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_2 = (__pyx_t_3 != Py_None);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (__pyx_t_2) {
  } else {
    __pyx_t_3 = __Pyx_PyBool_FromLong(__pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 744, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_1 = __pyx_t_3;
    __pyx_t_3 = 0;
    goto __pyx_L3_bool_binop_done;
  }
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_output); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 744, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_2 = PyString_Check(__pyx_t_3); 
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_PyBool_FromLong(__pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 744, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_1 = __pyx_t_3;
  __pyx_t_3 = 0;
  __pyx_L3_bool_binop_done:;
  if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_reverb_to_file, __pyx_t_1) < 0) __PYX_ERR(0, 744, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+0745:         self.old_srate = get_srate()
  __pyx_t_5 = __pyx_f_8pysndlib_3clm_get_srate(0); if (unlikely(__pyx_t_5 == ((double)-1) && PyErr_Occurred())) __PYX_ERR(0, 745, __pyx_L1_error)
  __pyx_t_1 = PyFloat_FromDouble(__pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 745, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_old_srate, __pyx_t_1) < 0) __PYX_ERR(0, 745, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+0746:         self.finalize = finalize
  if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_finalize, __pyx_v_finalize) < 0) __PYX_ERR(0, 746, __pyx_L1_error)
 0747: 
+0748:     def __enter__(self):
/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_5Sound_3__enter__(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_8pysndlib_3clm_5Sound_3__enter__ = {"__enter__", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_5Sound_3__enter__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_8pysndlib_3clm_5Sound_3__enter__(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_self = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__enter__ (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,0};
    PyObject* values[1] = {0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_self)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 748, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "__enter__") < 0)) __PYX_ERR(0, 748, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
    }
    __pyx_v_self = values[0];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__enter__", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 748, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.Sound.__enter__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pysndlib_3clm_5Sound_2__enter__(__pyx_self, __pyx_v_self);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_5Sound_2__enter__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__enter__", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_XDECREF(__pyx_t_12);
  __Pyx_XDECREF(__pyx_t_16);
  __Pyx_AddTraceback("pysndlib.clm.Sound.__enter__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_43 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_5Sound_3__enter__, 0, __pyx_n_s_Sound___enter, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__123)); if (unlikely(!__pyx_t_43)) __PYX_ERR(0, 748, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_43);
  if (__Pyx_SetNameInClass(__pyx_t_41, __pyx_n_s_enter, __pyx_t_43) < 0) __PYX_ERR(0, 748, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_43); __pyx_t_43 = 0;
/* … */
  __pyx_codeobj__123 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__72, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_enter, 748, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__123)) __PYX_ERR(0, 748, __pyx_L1_error)
 0749: 
+0750:         if not self.clipped:
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_clipped); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 750, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 750, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_3 = (!__pyx_t_2);
  if (__pyx_t_3) {
/* … */
    goto __pyx_L3;
  }
+0751:             if (self.scaled_by or self.scaled_to) and (self.sample_type in [Sample.BFLOAT, Sample.LFLOAT, Sample.BDOUBLE, Sample.LDOUBLE]):
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_scaled_by); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 751, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 751, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    if (!__pyx_t_2) {
    } else {
      goto __pyx_L6_next_and;
    }
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_scaled_to); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 751, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 751, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    if (__pyx_t_2) {
    } else {
      __pyx_t_3 = __pyx_t_2;
      goto __pyx_L5_bool_binop_done;
    }
    __pyx_L6_next_and:;
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_sample_type); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 751, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_Sample); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 751, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_BFLOAT); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 751, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_4 = PyObject_RichCompare(__pyx_t_1, __pyx_t_5, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 751, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely((__pyx_t_6 < 0))) __PYX_ERR(0, 751, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (!__pyx_t_6) {
    } else {
      __pyx_t_2 = __pyx_t_6;
      goto __pyx_L8_bool_binop_done;
    }
    __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_Sample); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 751, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_LFLOAT); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 751, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_4 = PyObject_RichCompare(__pyx_t_1, __pyx_t_5, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 751, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely((__pyx_t_6 < 0))) __PYX_ERR(0, 751, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (!__pyx_t_6) {
    } else {
      __pyx_t_2 = __pyx_t_6;
      goto __pyx_L8_bool_binop_done;
    }
    __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_Sample); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 751, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_BDOUBLE); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 751, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_4 = PyObject_RichCompare(__pyx_t_1, __pyx_t_5, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 751, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely((__pyx_t_6 < 0))) __PYX_ERR(0, 751, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (!__pyx_t_6) {
    } else {
      __pyx_t_2 = __pyx_t_6;
      goto __pyx_L8_bool_binop_done;
    }
    __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_Sample); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 751, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_LDOUBLE); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 751, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_4 = PyObject_RichCompare(__pyx_t_1, __pyx_t_5, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 751, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely((__pyx_t_6 < 0))) __PYX_ERR(0, 751, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_2 = __pyx_t_6;
    __pyx_L8_bool_binop_done:;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_6 = __pyx_t_2;
    __pyx_t_3 = __pyx_t_6;
    __pyx_L5_bool_binop_done:;
    if (__pyx_t_3) {
/* … */
      goto __pyx_L4;
    }
+0752:                 csndlib.mus_set_clipping(False)
      (void)(mus_set_clipping(0));
 0753:             else:
+0754:                 csndlib.mus_set_clipping(CLM.clipped)
    /*else*/ {
      __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_CLM); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 754, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_clipped); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 754, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely((__pyx_t_3 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 754, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      (void)(mus_set_clipping(__pyx_t_3));
    }
    __pyx_L4:;
 0755:         else:
+0756:             csndlib.mus_set_clipping(self.clipped)
  /*else*/ {
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_clipped); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 756, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely((__pyx_t_3 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 756, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    (void)(mus_set_clipping(__pyx_t_3));
  }
  __pyx_L3:;
 0757: 
+0758:         set_srate(self.srate)
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_srate); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 758, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_7 = __pyx_PyFloat_AsDouble(__pyx_t_4); if (unlikely((__pyx_t_7 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 758, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_8 = __pyx_f_8pysndlib_3clm_set_srate(__pyx_t_7, 0); if (unlikely(__pyx_t_8 == ((double)-1) && PyErr_Occurred())) __PYX_ERR(0, 758, __pyx_L1_error)
 0759: 
 0760:         # in original why use reverb-1?
+0761:         if  self.statistics :
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_statistics); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 761, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(0, 761, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (__pyx_t_3) {
/* … */
  }
+0762:             self.tic = time.perf_counter()
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_time); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 762, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_perf_counter); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 762, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_1 = NULL;
    __pyx_t_9 = 0;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) {
      __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_5);
      if (likely(__pyx_t_1)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
        __Pyx_INCREF(__pyx_t_1);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_5, function);
        __pyx_t_9 = 1;
      }
    }
    {
      PyObject *__pyx_callargs[1] = {__pyx_t_1, };
      __pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_5, __pyx_callargs+1-__pyx_t_9, 0+__pyx_t_9);
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 762, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    }
    if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_tic, __pyx_t_4) < 0) __PYX_ERR(0, 762, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 0763: 
+0764:         if self.output_to_file :
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_output_to_file); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 764, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(0, 764, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (__pyx_t_3) {
/* … */
    goto __pyx_L13;
  }
+0765:             if self.continue_old_file:
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_continue_old_file); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 765, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(0, 765, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (__pyx_t_3) {
/* … */
      goto __pyx_L14;
    }
+0766:                 CLM.output = continue_sample2file(self.filename)
      __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_filename); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 766, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      if (!(likely(PyString_CheckExact(__pyx_t_4))||((__pyx_t_4) == Py_None) || __Pyx_RaiseUnexpectedTypeError("str", __pyx_t_4))) __PYX_ERR(0, 766, __pyx_L1_error)
      __pyx_t_5 = ((PyObject *)__pyx_f_8pysndlib_3clm_continue_sample2file(((PyObject*)__pyx_t_4), 0)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 766, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_CLM); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 766, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      if (__Pyx_PyObject_SetAttrStr(__pyx_t_4, __pyx_n_s_output, __pyx_t_5) < 0) __PYX_ERR(0, 766, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+0767:                 set_srate(csndlib.mus_sound_srate(self.filename)) # maybe print warning or at least note 
      __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_filename); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 767, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_10 = __Pyx_PyObject_AsString(__pyx_t_4); if (unlikely((!__pyx_t_10) && PyErr_Occurred())) __PYX_ERR(0, 767, __pyx_L1_error)
      __pyx_t_8 = __pyx_f_8pysndlib_3clm_set_srate(mus_sound_srate(__pyx_t_10), 0); if (unlikely(__pyx_t_8 == ((double)-1) && PyErr_Occurred())) __PYX_ERR(0, 767, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 0768:             else:
+0769:                 CLM.output = make_sample2file(self.output,self.channels, sample_type=self.sample_type , header_type=self.header_type)
    /*else*/ {
      __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_output); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 769, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_channels); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 769, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_sample_type); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 769, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_header_type); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 769, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_11);
      __pyx_t_13.__pyx_n = 3;
      __pyx_t_13.chans = __pyx_t_5;
      __pyx_t_13.sample_type = __pyx_t_1;
      __pyx_t_13.header_type = __pyx_t_11;
      __pyx_t_12 = ((PyObject *)__pyx_f_8pysndlib_3clm_make_sample2file(__pyx_t_4, 0, &__pyx_t_13)); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 769, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_12);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      __Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_n_s_CLM); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 769, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_11);
      if (__Pyx_PyObject_SetAttrStr(__pyx_t_11, __pyx_n_s_output, __pyx_t_12) < 0) __PYX_ERR(0, 769, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
    }
    __pyx_L14:;
+0770:         elif is_list_or_ndarray(self.output):
  __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_output); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 770, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_11);
  __pyx_t_12 = __pyx_f_8pysndlib_3clm_is_list_or_ndarray(__pyx_t_11, 0); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 770, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_12);
  __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_12); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(0, 770, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
  if (likely(__pyx_t_3)) {
/* … */
    goto __pyx_L13;
  }
+0771:             CLM.output = self.output
    __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_output); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 771, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_12);
    __Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_n_s_CLM); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 771, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_11);
    if (__Pyx_PyObject_SetAttrStr(__pyx_t_11, __pyx_n_s_output, __pyx_t_12) < 0) __PYX_ERR(0, 771, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
    __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
 0772:         else:
+0773:             raise TypeError(f"writing to  {type(self.output)} not supported")
  /*else*/ {
    __pyx_t_11 = PyTuple_New(3); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 773, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_11);
    __pyx_t_14 = 0;
    __pyx_t_15 = 127;
    __Pyx_INCREF(__pyx_kp_u_writing_to);
    __pyx_t_14 += 12;
    __Pyx_GIVEREF(__pyx_kp_u_writing_to);
    PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_kp_u_writing_to);
    __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_output); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 773, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_12);
    __pyx_t_1 = __Pyx_PyObject_FormatSimple(((PyObject *)Py_TYPE(__pyx_t_12)), __pyx_empty_unicode); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 773, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
    __pyx_t_15 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_1) > __pyx_t_15) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_1) : __pyx_t_15;
    __pyx_t_14 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_1);
    __Pyx_GIVEREF(__pyx_t_1);
    PyTuple_SET_ITEM(__pyx_t_11, 1, __pyx_t_1);
    __pyx_t_1 = 0;
    __Pyx_INCREF(__pyx_kp_u_not_supported);
    __pyx_t_14 += 14;
    __Pyx_GIVEREF(__pyx_kp_u_not_supported);
    PyTuple_SET_ITEM(__pyx_t_11, 2, __pyx_kp_u_not_supported);
    __pyx_t_1 = __Pyx_PyUnicode_Join(__pyx_t_11, 3, __pyx_t_14, __pyx_t_15); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 773, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
    __pyx_t_11 = __Pyx_PyObject_CallOneArg(__pyx_builtin_TypeError, __pyx_t_1); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 773, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_11);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_Raise(__pyx_t_11, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
    __PYX_ERR(0, 773, __pyx_L1_error)
  }
  __pyx_L13:;
 0774: 
+0775:         if self.reverb_to_file:
  __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_reverb_to_file); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 775, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_11);
  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_11); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(0, 775, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
  if (__pyx_t_3) {
/* … */
  }
+0776:             if self.continue_old_file:
    __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_continue_old_file); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 776, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_11);
    __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_11); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(0, 776, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
    if (__pyx_t_3) {
/* … */
      goto __pyx_L16;
    }
+0777:                 CLM.reverb = continue_sample2file(self.revfile)
      __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_revfile); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 777, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_11);
      if (!(likely(PyString_CheckExact(__pyx_t_11))||((__pyx_t_11) == Py_None) || __Pyx_RaiseUnexpectedTypeError("str", __pyx_t_11))) __PYX_ERR(0, 777, __pyx_L1_error)
      __pyx_t_1 = ((PyObject *)__pyx_f_8pysndlib_3clm_continue_sample2file(((PyObject*)__pyx_t_11), 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 777, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      __Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_n_s_CLM); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 777, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_11);
      if (__Pyx_PyObject_SetAttrStr(__pyx_t_11, __pyx_n_s_reverb, __pyx_t_1) < 0) __PYX_ERR(0, 777, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
 0778:             else:
+0779:                 CLM.reverb = make_sample2file(self.revfile,self.reverb_channels, sample_type=self.sample_type , header_type=self.header_type)
    /*else*/ {
      __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_revfile); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 779, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_11);
      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_reverb_channels); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 779, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_sample_type); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 779, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_12);
      __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_header_type); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 779, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_13.__pyx_n = 3;
      __pyx_t_13.chans = __pyx_t_1;
      __pyx_t_13.sample_type = __pyx_t_12;
      __pyx_t_13.header_type = __pyx_t_5;
      __pyx_t_4 = ((PyObject *)__pyx_f_8pysndlib_3clm_make_sample2file(__pyx_t_11, 0, &__pyx_t_13)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 779, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_CLM); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 779, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      if (__Pyx_PyObject_SetAttrStr(__pyx_t_5, __pyx_n_s_reverb, __pyx_t_4) < 0) __PYX_ERR(0, 779, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    }
    __pyx_L16:;
 0780: 
+0781:         if self.reverb and not self.reverb_to_file and is_list_or_ndarray(self.output):
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_reverb); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 781, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely((__pyx_t_6 < 0))) __PYX_ERR(0, 781, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (__pyx_t_6) {
  } else {
    __pyx_t_3 = __pyx_t_6;
    goto __pyx_L18_bool_binop_done;
  }
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_reverb_to_file); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 781, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely((__pyx_t_6 < 0))) __PYX_ERR(0, 781, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_2 = (!__pyx_t_6);
  if (__pyx_t_2) {
  } else {
    __pyx_t_3 = __pyx_t_2;
    goto __pyx_L18_bool_binop_done;
  }
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_output); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 781, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_4 = __pyx_f_8pysndlib_3clm_is_list_or_ndarray(__pyx_t_5, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 781, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 781, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_3 = __pyx_t_2;
  __pyx_L18_bool_binop_done:;
  if (__pyx_t_3) {
/* … */
  }
+0782:             CLM.reverb = np.zeros((self.reverb_channels, np.shape(CLM.output)[1]), dtype=CLM.output.dtype)
    __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 782, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_zeros); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 782, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_reverb_channels); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 782, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 782, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_shape); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 782, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_11);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_CLM); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 782, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_16 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_output); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 782, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_16);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_1 = NULL;
    __pyx_t_9 = 0;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_11))) {
      __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_11);
      if (likely(__pyx_t_1)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_11);
        __Pyx_INCREF(__pyx_t_1);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_11, function);
        __pyx_t_9 = 1;
      }
    }
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_1, __pyx_t_16};
      __pyx_t_12 = __Pyx_PyObject_FastCall(__pyx_t_11, __pyx_callargs+1-__pyx_t_9, 1+__pyx_t_9);
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
      if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 782, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_12);
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
    }
    __pyx_t_11 = __Pyx_GetItemInt(__pyx_t_12, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 782, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_11);
    __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
    __pyx_t_12 = PyTuple_New(2); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 782, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_12);
    __Pyx_GIVEREF(__pyx_t_4);
    PyTuple_SET_ITEM(__pyx_t_12, 0, __pyx_t_4);
    __Pyx_GIVEREF(__pyx_t_11);
    PyTuple_SET_ITEM(__pyx_t_12, 1, __pyx_t_11);
    __pyx_t_4 = 0;
    __pyx_t_11 = 0;
    __pyx_t_11 = PyTuple_New(1); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 782, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_11);
    __Pyx_GIVEREF(__pyx_t_12);
    PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_t_12);
    __pyx_t_12 = 0;
    __pyx_t_12 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 782, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_12);
    __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_CLM); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 782, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_16 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_output); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 782, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_16);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_16, __pyx_n_s_dtype); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 782, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
    if (PyDict_SetItem(__pyx_t_12, __pyx_n_s_dtype, __pyx_t_4) < 0) __PYX_ERR(0, 782, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_11, __pyx_t_12); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 782, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
    __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
    __Pyx_GetModuleGlobalName(__pyx_t_12, __pyx_n_s_CLM); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 782, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_12);
    if (__Pyx_PyObject_SetAttrStr(__pyx_t_12, __pyx_n_s_reverb, __pyx_t_4) < 0) __PYX_ERR(0, 782, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
 0783: 
+0784:         return self
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_self);
  __pyx_r = __pyx_v_self;
  goto __pyx_L0;
 0785: 
+0786:     def __exit__(self, *args):
/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_5Sound_5__exit__(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_8pysndlib_3clm_5Sound_5__exit__ = {"__exit__", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_5Sound_5__exit__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_8pysndlib_3clm_5Sound_5__exit__(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_self = 0;
  CYTHON_UNUSED PyObject *__pyx_v_args = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__exit__ (wrapper)", 0);
  __pyx_v_args = __Pyx_ArgsSlice_FASTCALL(__pyx_args, 1, __pyx_nargs);
  if (unlikely(!__pyx_v_args)) {
    __Pyx_RefNannyFinishContext();
    return NULL;
  }
  __Pyx_GOTREF(__pyx_v_args);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,0};
    PyObject* values[1] = {0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        default:
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_self)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 786, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        const Py_ssize_t used_pos_args = (kwd_pos_args < 1) ? kwd_pos_args : 1;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, used_pos_args, "__exit__") < 0)) __PYX_ERR(0, 786, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs < 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
    }
    __pyx_v_self = values[0];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__exit__", 0, 1, 1, __pyx_nargs); __PYX_ERR(0, 786, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_DECREF(__pyx_v_args); __pyx_v_args = 0;
  __Pyx_AddTraceback("pysndlib.clm.Sound.__exit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pysndlib_3clm_5Sound_4__exit__(__pyx_self, __pyx_v_self, __pyx_v_args);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  __Pyx_DECREF(__pyx_v_args);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_5Sound_4__exit__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_args) {
  __Pyx_memviewslice __pyx_v_vals_view = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_times_view = { 0, 0, { 0 }, { 0 }, { 0 } };
  PyObject *__pyx_v_toc = NULL;
  PyObject *__pyx_v_statstr = NULL;
  PyObject *__pyx_v_chans = NULL;
  PyObject *__pyx_v_vals = NULL;
  PyObject *__pyx_v_times = NULL;
  CYTHON_UNUSED mus_long_t __pyx_v_maxamp;
  PyObject *__pyx_v_i = NULL;
  PyObject *__pyx_v_mabs = NULL;
  PyObject *__pyx_v_arr = NULL;
  CYTHON_UNUSED PyObject *__pyx_v__ = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__exit__", 0);
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __PYX_XCLEAR_MEMVIEW(&__pyx_t_1, 1);
  __PYX_XCLEAR_MEMVIEW(&__pyx_t_2, 1);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_XDECREF(__pyx_t_20);
  __Pyx_XDECREF(__pyx_t_21);
  __Pyx_XDECREF(__pyx_t_22);
  __Pyx_AddTraceback("pysndlib.clm.Sound.__exit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __PYX_XCLEAR_MEMVIEW(&__pyx_v_vals_view, 1);
  __PYX_XCLEAR_MEMVIEW(&__pyx_v_times_view, 1);
  __Pyx_XDECREF(__pyx_v_toc);
  __Pyx_XDECREF(__pyx_v_statstr);
  __Pyx_XDECREF(__pyx_v_chans);
  __Pyx_XDECREF(__pyx_v_vals);
  __Pyx_XDECREF(__pyx_v_times);
  __Pyx_XDECREF(__pyx_v_i);
  __Pyx_XDECREF(__pyx_v_mabs);
  __Pyx_XDECREF(__pyx_v_arr);
  __Pyx_XDECREF(__pyx_v__);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__125 = PyTuple_Pack(14, __pyx_n_s_self, __pyx_n_s_args, __pyx_n_s_vals_view, __pyx_n_s_times_view, __pyx_n_s_toc, __pyx_n_s_statstr, __pyx_n_s_chans, __pyx_n_s_vals, __pyx_n_s_times, __pyx_n_s_maxamp_3, __pyx_n_s_i, __pyx_n_s_mabs, __pyx_n_s_arr, __pyx_n_s__124); if (unlikely(!__pyx_tuple__125)) __PYX_ERR(0, 786, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__125);
  __Pyx_GIVEREF(__pyx_tuple__125);
/* … */
  __pyx_t_43 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_5Sound_5__exit__, 0, __pyx_n_s_Sound___exit, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__126)); if (unlikely(!__pyx_t_43)) __PYX_ERR(0, 786, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_43);
  if (__Pyx_SetNameInClass(__pyx_t_41, __pyx_n_s_exit, __pyx_t_43) < 0) __PYX_ERR(0, 786, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_43); __pyx_t_43 = 0;
  __pyx_codeobj__126 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 14, 0, CO_OPTIMIZED|CO_NEWLOCALS|CO_VARARGS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__125, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_exit, 786, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__126)) __PYX_ERR(0, 786, __pyx_L1_error)
+0787:         cdef cclm.mus_float_t [:] vals_view = None
  __pyx_t_1 = __Pyx_PyObject_to_MemoryviewSlice_ds_nn_mus_float_t(Py_None, PyBUF_WRITABLE); if (unlikely(!__pyx_t_1.memview)) __PYX_ERR(0, 787, __pyx_L1_error)
  __pyx_v_vals_view = __pyx_t_1;
  __pyx_t_1.memview = NULL;
  __pyx_t_1.data = NULL;
+0788:         cdef cclm.mus_long_t [:] times_view = None
  __pyx_t_2 = __Pyx_PyObject_to_MemoryviewSlice_ds_nn_mus_long_t(Py_None, PyBUF_WRITABLE); if (unlikely(!__pyx_t_2.memview)) __PYX_ERR(0, 788, __pyx_L1_error)
  __pyx_v_times_view = __pyx_t_2;
  __pyx_t_2.memview = NULL;
  __pyx_t_2.data = NULL;
+0789:         if self.reverb:
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_reverb); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 789, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely((__pyx_t_4 < 0))) __PYX_ERR(0, 789, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (__pyx_t_4) {
/* … */
  }
+0790:             if self.reverb_to_file:
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_reverb_to_file); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 790, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely((__pyx_t_4 < 0))) __PYX_ERR(0, 790, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (__pyx_t_4) {
/* … */
    }
+0791:                 mus_close(CLM.reverb)
      __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_CLM); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 791, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_reverb); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 791, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_8pysndlib_3clm_mus_any))))) __PYX_ERR(0, 791, __pyx_L1_error)
      __pyx_t_6 = __pyx_f_8pysndlib_3clm_mus_close(((struct __pyx_obj_8pysndlib_3clm_mus_any *)__pyx_t_5), 0); if (unlikely(__pyx_t_6 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 791, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+0792:                 CLM.reverb = make_file2sample(self.revfile)
      __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_revfile); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 792, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_3 = ((PyObject *)__pyx_f_8pysndlib_3clm_make_file2sample(__pyx_t_5, 0, NULL)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 792, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_CLM); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 792, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      if (__Pyx_PyObject_SetAttrStr(__pyx_t_5, __pyx_n_s_reverb, __pyx_t_3) < 0) __PYX_ERR(0, 792, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 0793: 
+0794:                 if self.reverb_data:
      __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_reverb_data); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 794, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely((__pyx_t_4 < 0))) __PYX_ERR(0, 794, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      if (__pyx_t_4) {
/* … */
        goto __pyx_L5;
      }
+0795:                     self.reverb(**self.reverb_data)
        __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_reverb); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 795, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_reverb_data); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 795, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_7);
        if (unlikely(__pyx_t_7 == Py_None)) {
          PyErr_SetString(PyExc_TypeError, "argument after ** must be a mapping, not NoneType");
          __PYX_ERR(0, 795, __pyx_L1_error)
        }
        if (likely(PyDict_CheckExact(__pyx_t_7))) {
          __pyx_t_3 = PyDict_Copy(__pyx_t_7); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 795, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_3);
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
        } else {
          __pyx_t_3 = __Pyx_PyObject_CallOneArg((PyObject*)&PyDict_Type, __pyx_t_7); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 795, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_3);
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
        }
        __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_empty_tuple, __pyx_t_3); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 795, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_7);
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 0796:                 else:
+0797:                     self.reverb()
      /*else*/ {
        __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_reverb); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 797, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        __pyx_t_5 = NULL;
        __pyx_t_6 = 0;
        if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
          __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_3);
          if (likely(__pyx_t_5)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
            __Pyx_INCREF(__pyx_t_5);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_3, function);
            __pyx_t_6 = 1;
          }
        }
        {
          PyObject *__pyx_callargs[1] = {__pyx_t_5, };
          __pyx_t_7 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_6, 0+__pyx_t_6);
          __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
          if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 797, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_7);
          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
        }
        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      }
      __pyx_L5:;
+0798:                 mus_close(CLM.reverb)
      __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_CLM); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 798, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_reverb); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 798, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_8pysndlib_3clm_mus_any))))) __PYX_ERR(0, 798, __pyx_L1_error)
      __pyx_t_6 = __pyx_f_8pysndlib_3clm_mus_close(((struct __pyx_obj_8pysndlib_3clm_mus_any *)__pyx_t_3), 0); if (unlikely(__pyx_t_6 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 798, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 0799: 
+0800:             if is_list_or_ndarray(CLM.reverb):
    __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_CLM); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 800, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_reverb); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 800, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_3 = __pyx_f_8pysndlib_3clm_is_list_or_ndarray(__pyx_t_7, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 800, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely((__pyx_t_4 < 0))) __PYX_ERR(0, 800, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (__pyx_t_4) {
/* … */
    }
+0801:                 if self.reverb_data:
      __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_reverb_data); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 801, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely((__pyx_t_4 < 0))) __PYX_ERR(0, 801, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      if (__pyx_t_4) {
/* … */
        goto __pyx_L7;
      }
+0802:                     self.reverb(**self.reverb_data)
        __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_reverb); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 802, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_reverb_data); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 802, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        if (unlikely(__pyx_t_5 == Py_None)) {
          PyErr_SetString(PyExc_TypeError, "argument after ** must be a mapping, not NoneType");
          __PYX_ERR(0, 802, __pyx_L1_error)
        }
        if (likely(PyDict_CheckExact(__pyx_t_5))) {
          __pyx_t_7 = PyDict_Copy(__pyx_t_5); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 802, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_7);
          __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
        } else {
          __pyx_t_7 = __Pyx_PyObject_CallOneArg((PyObject*)&PyDict_Type, __pyx_t_5); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 802, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_7);
          __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
        }
        __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_empty_tuple, __pyx_t_7); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 802, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 0803:                 else:
+0804:                     self.reverb()
      /*else*/ {
        __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_reverb); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 804, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_7);
        __pyx_t_3 = NULL;
        __pyx_t_6 = 0;
        if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_7))) {
          __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_7);
          if (likely(__pyx_t_3)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7);
            __Pyx_INCREF(__pyx_t_3);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_7, function);
            __pyx_t_6 = 1;
          }
        }
        {
          PyObject *__pyx_callargs[1] = {__pyx_t_3, };
          __pyx_t_5 = __Pyx_PyObject_FastCall(__pyx_t_7, __pyx_callargs+1-__pyx_t_6, 0+__pyx_t_6);
          __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
          if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 804, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_5);
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
        }
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      }
      __pyx_L7:;
 0805: 
+0806:         if self.output_to_file:
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_output_to_file); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 806, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely((__pyx_t_4 < 0))) __PYX_ERR(0, 806, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (__pyx_t_4) {
/* … */
  }
+0807:             mus_close(CLM.output)
    __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_CLM); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 807, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_output); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 807, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (!(likely(((__pyx_t_7) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_7, __pyx_ptype_8pysndlib_3clm_mus_any))))) __PYX_ERR(0, 807, __pyx_L1_error)
    __pyx_t_6 = __pyx_f_8pysndlib_3clm_mus_close(((struct __pyx_obj_8pysndlib_3clm_mus_any *)__pyx_t_7), 0); if (unlikely(__pyx_t_6 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 807, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 0808: 
 0809: 
+0810:         if  self.statistics :
  __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_statistics); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 810, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_7); if (unlikely((__pyx_t_4 < 0))) __PYX_ERR(0, 810, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  if (__pyx_t_4) {
/* … */
  }
+0811:             toc = time.perf_counter()
    __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_time); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 811, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_perf_counter); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 811, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_5 = NULL;
    __pyx_t_6 = 0;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
      __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_3);
      if (likely(__pyx_t_5)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
        __Pyx_INCREF(__pyx_t_5);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_3, function);
        __pyx_t_6 = 1;
      }
    }
    {
      PyObject *__pyx_callargs[1] = {__pyx_t_5, };
      __pyx_t_7 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_6, 0+__pyx_t_6);
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 811, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    }
    __pyx_v_toc = __pyx_t_7;
    __pyx_t_7 = 0;
 0812: 
+0813:             statstr = ''
    __Pyx_INCREF(__pyx_kp_s_);
    __pyx_v_statstr = __pyx_kp_s_;
+0814:             if isinstance(self.output, str):
    __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_output); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 814, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __pyx_t_4 = PyString_Check(__pyx_t_7); 
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    if (__pyx_t_4) {
/* … */
    }
+0815:                 statstr = f"{self.output}: "
      __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_output); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 815, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __pyx_t_3 = __Pyx_PyObject_FormatSimple(__pyx_t_7, __pyx_empty_unicode); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 815, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      __pyx_t_7 = __Pyx_PyUnicode_ConcatInPlace(__pyx_t_3, __pyx_kp_u__4); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 815, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_DECREF_SET(__pyx_v_statstr, __pyx_t_7);
      __pyx_t_7 = 0;
+0816:             if self.output_to_file:
    __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_output_to_file); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 816, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_7); if (unlikely((__pyx_t_4 < 0))) __PYX_ERR(0, 816, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    if (__pyx_t_4) {
/* … */
      goto __pyx_L11;
    }
+0817:                     chans = clm_channels(self.output)
      __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_clm_channels); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 817, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_output); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 817, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_8 = NULL;
      __pyx_t_6 = 0;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
        __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_3);
        if (likely(__pyx_t_8)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
          __Pyx_INCREF(__pyx_t_8);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_3, function);
          __pyx_t_6 = 1;
        }
      }
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_8, __pyx_t_5};
        __pyx_t_7 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_6, 1+__pyx_t_6);
        __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
        if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 817, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_7);
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      }
      __pyx_v_chans = __pyx_t_7;
      __pyx_t_7 = 0;
+0818:                     vals = np.zeros(chans, dtype=np.double)
      __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_np); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 818, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_zeros); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 818, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      __pyx_t_7 = PyTuple_New(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 818, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_INCREF(__pyx_v_chans);
      __Pyx_GIVEREF(__pyx_v_chans);
      PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_v_chans);
      __pyx_t_5 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 818, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 818, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_double); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 818, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_dtype, __pyx_t_9) < 0) __PYX_ERR(0, 818, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      __pyx_t_9 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_7, __pyx_t_5); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 818, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __pyx_v_vals = __pyx_t_9;
      __pyx_t_9 = 0;
+0819:                     times = np.zeros(chans, dtype=np.int64)
      __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_np); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 819, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_zeros); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 819, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      __pyx_t_9 = PyTuple_New(1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 819, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __Pyx_INCREF(__pyx_v_chans);
      __Pyx_GIVEREF(__pyx_v_chans);
      PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_v_chans);
      __pyx_t_7 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 819, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 819, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_int64); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 819, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_dtype, __pyx_t_8) < 0) __PYX_ERR(0, 819, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_9, __pyx_t_7); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 819, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      __pyx_v_times = __pyx_t_8;
      __pyx_t_8 = 0;
+0820:                     vals_view = vals
      __pyx_t_1 = __Pyx_PyObject_to_MemoryviewSlice_ds_nn_mus_float_t(__pyx_v_vals, PyBUF_WRITABLE); if (unlikely(!__pyx_t_1.memview)) __PYX_ERR(0, 820, __pyx_L1_error)
      __PYX_XCLEAR_MEMVIEW(&__pyx_v_vals_view, 1);
      __pyx_v_vals_view = __pyx_t_1;
      __pyx_t_1.memview = NULL;
      __pyx_t_1.data = NULL;
+0821:                     times_view = times
      __pyx_t_2 = __Pyx_PyObject_to_MemoryviewSlice_ds_nn_mus_long_t(__pyx_v_times, PyBUF_WRITABLE); if (unlikely(!__pyx_t_2.memview)) __PYX_ERR(0, 821, __pyx_L1_error)
      __PYX_XCLEAR_MEMVIEW(&__pyx_v_times_view, 1);
      __pyx_v_times_view = __pyx_t_2;
      __pyx_t_2.memview = NULL;
      __pyx_t_2.data = NULL;
+0822:                     maxamp = csndlib.mus_sound_maxamps(self.output, chans, &vals_view[0], &times_view[0])
      __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_output); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 822, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __pyx_t_10 = __Pyx_PyObject_AsString(__pyx_t_8); if (unlikely((!__pyx_t_10) && PyErr_Occurred())) __PYX_ERR(0, 822, __pyx_L1_error)
      __pyx_t_6 = __Pyx_PyInt_As_int(__pyx_v_chans); if (unlikely((__pyx_t_6 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 822, __pyx_L1_error)
      __pyx_t_11 = 0;
      __pyx_t_12 = -1;
      if (__pyx_t_11 < 0) {
        __pyx_t_11 += __pyx_v_vals_view.shape[0];
        if (unlikely(__pyx_t_11 < 0)) __pyx_t_12 = 0;
      } else if (unlikely(__pyx_t_11 >= __pyx_v_vals_view.shape[0])) __pyx_t_12 = 0;
      if (unlikely(__pyx_t_12 != -1)) {
        __Pyx_RaiseBufferIndexError(__pyx_t_12);
        __PYX_ERR(0, 822, __pyx_L1_error)
      }
      __pyx_t_13 = 0;
      __pyx_t_12 = -1;
      if (__pyx_t_13 < 0) {
        __pyx_t_13 += __pyx_v_times_view.shape[0];
        if (unlikely(__pyx_t_13 < 0)) __pyx_t_12 = 0;
      } else if (unlikely(__pyx_t_13 >= __pyx_v_times_view.shape[0])) __pyx_t_12 = 0;
      if (unlikely(__pyx_t_12 != -1)) {
        __Pyx_RaiseBufferIndexError(__pyx_t_12);
        __PYX_ERR(0, 822, __pyx_L1_error)
      }
      __pyx_v_maxamp = mus_sound_maxamps(__pyx_t_10, __pyx_t_6, (&(*((mus_float_t *) ( /* dim=0 */ (__pyx_v_vals_view.data + __pyx_t_11 * __pyx_v_vals_view.strides[0]) )))), (&(*((mus_long_t *) ( /* dim=0 */ (__pyx_v_times_view.data + __pyx_t_13 * __pyx_v_times_view.strides[0]) )))));
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+0823:                     statstr += f": maxamp: {vals} {times} "
      __pyx_t_8 = PyTuple_New(5); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 823, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __pyx_t_14 = 0;
      __pyx_t_15 = 127;
      __Pyx_INCREF(__pyx_kp_u_maxamp);
      __pyx_t_14 += 10;
      __Pyx_GIVEREF(__pyx_kp_u_maxamp);
      PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_kp_u_maxamp);
      __pyx_t_7 = __Pyx_PyObject_FormatSimple(__pyx_v_vals, __pyx_empty_unicode); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 823, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __pyx_t_15 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_7) > __pyx_t_15) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_7) : __pyx_t_15;
      __pyx_t_14 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_7);
      __Pyx_GIVEREF(__pyx_t_7);
      PyTuple_SET_ITEM(__pyx_t_8, 1, __pyx_t_7);
      __pyx_t_7 = 0;
      __Pyx_INCREF(__pyx_kp_u__17);
      __pyx_t_14 += 1;
      __Pyx_GIVEREF(__pyx_kp_u__17);
      PyTuple_SET_ITEM(__pyx_t_8, 2, __pyx_kp_u__17);
      __pyx_t_7 = __Pyx_PyObject_FormatSimple(__pyx_v_times, __pyx_empty_unicode); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 823, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __pyx_t_15 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_7) > __pyx_t_15) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_7) : __pyx_t_15;
      __pyx_t_14 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_7);
      __Pyx_GIVEREF(__pyx_t_7);
      PyTuple_SET_ITEM(__pyx_t_8, 3, __pyx_t_7);
      __pyx_t_7 = 0;
      __Pyx_INCREF(__pyx_kp_u__17);
      __pyx_t_14 += 1;
      __Pyx_GIVEREF(__pyx_kp_u__17);
      PyTuple_SET_ITEM(__pyx_t_8, 4, __pyx_kp_u__17);
      __pyx_t_7 = __Pyx_PyUnicode_Join(__pyx_t_8, 5, __pyx_t_14, __pyx_t_15); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 823, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __pyx_t_8 = PyNumber_InPlaceAdd(__pyx_v_statstr, __pyx_t_7); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 823, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      __Pyx_DECREF_SET(__pyx_v_statstr, __pyx_t_8);
      __pyx_t_8 = 0;
 0824:             else:
+0825:                 chans = clm_channels(self.output)
    /*else*/ {
      __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_clm_channels); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 825, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_output); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 825, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __pyx_t_5 = NULL;
      __pyx_t_6 = 0;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_7))) {
        __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_7);
        if (likely(__pyx_t_5)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7);
          __Pyx_INCREF(__pyx_t_5);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_7, function);
          __pyx_t_6 = 1;
        }
      }
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_t_9};
        __pyx_t_8 = __Pyx_PyObject_FastCall(__pyx_t_7, __pyx_callargs+1-__pyx_t_6, 1+__pyx_t_6);
        __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
        if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 825, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_8);
        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      }
      __pyx_v_chans = __pyx_t_8;
      __pyx_t_8 = 0;
+0826:                 vals = np.zeros(chans, dtype=np.double)
      __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 826, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_zeros); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 826, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __pyx_t_8 = PyTuple_New(1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 826, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_INCREF(__pyx_v_chans);
      __Pyx_GIVEREF(__pyx_v_chans);
      PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_v_chans);
      __pyx_t_9 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 826, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_np); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 826, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_double); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 826, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      if (PyDict_SetItem(__pyx_t_9, __pyx_n_s_dtype, __pyx_t_3) < 0) __PYX_ERR(0, 826, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_8, __pyx_t_9); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 826, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      __pyx_v_vals = __pyx_t_3;
      __pyx_t_3 = 0;
+0827:                 times = np.zeros(chans, dtype=np.int64)
      __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 827, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_zeros); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 827, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 827, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_INCREF(__pyx_v_chans);
      __Pyx_GIVEREF(__pyx_v_chans);
      PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_chans);
      __pyx_t_8 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 827, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_np); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 827, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_int64); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 827, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      if (PyDict_SetItem(__pyx_t_8, __pyx_n_s_dtype, __pyx_t_5) < 0) __PYX_ERR(0, 827, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_9, __pyx_t_3, __pyx_t_8); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 827, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __pyx_v_times = __pyx_t_5;
      __pyx_t_5 = 0;
+0828:                 for i in range(chans):
      __pyx_t_5 = __Pyx_PyObject_CallOneArg(__pyx_builtin_range, __pyx_v_chans); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 828, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      if (likely(PyList_CheckExact(__pyx_t_5)) || PyTuple_CheckExact(__pyx_t_5)) {
        __pyx_t_8 = __pyx_t_5; __Pyx_INCREF(__pyx_t_8); __pyx_t_14 = 0;
        __pyx_t_16 = NULL;
      } else {
        __pyx_t_14 = -1; __pyx_t_8 = PyObject_GetIter(__pyx_t_5); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 828, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_8);
        __pyx_t_16 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_8); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 828, __pyx_L1_error)
      }
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      for (;;) {
        if (likely(!__pyx_t_16)) {
          if (likely(PyList_CheckExact(__pyx_t_8))) {
            if (__pyx_t_14 >= PyList_GET_SIZE(__pyx_t_8)) break;
            #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
            __pyx_t_5 = PyList_GET_ITEM(__pyx_t_8, __pyx_t_14); __Pyx_INCREF(__pyx_t_5); __pyx_t_14++; if (unlikely((0 < 0))) __PYX_ERR(0, 828, __pyx_L1_error)
            #else
            __pyx_t_5 = PySequence_ITEM(__pyx_t_8, __pyx_t_14); __pyx_t_14++; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 828, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_5);
            #endif
          } else {
            if (__pyx_t_14 >= PyTuple_GET_SIZE(__pyx_t_8)) break;
            #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
            __pyx_t_5 = PyTuple_GET_ITEM(__pyx_t_8, __pyx_t_14); __Pyx_INCREF(__pyx_t_5); __pyx_t_14++; if (unlikely((0 < 0))) __PYX_ERR(0, 828, __pyx_L1_error)
            #else
            __pyx_t_5 = PySequence_ITEM(__pyx_t_8, __pyx_t_14); __pyx_t_14++; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 828, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_5);
            #endif
          }
        } else {
          __pyx_t_5 = __pyx_t_16(__pyx_t_8);
          if (unlikely(!__pyx_t_5)) {
            PyObject* exc_type = PyErr_Occurred();
            if (exc_type) {
              if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
              else __PYX_ERR(0, 828, __pyx_L1_error)
            }
            break;
          }
          __Pyx_GOTREF(__pyx_t_5);
        }
        __Pyx_XDECREF_SET(__pyx_v_i, __pyx_t_5);
        __pyx_t_5 = 0;
/* … */
      }
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+0829:                     mabs = np.abs(self.output[i])
        __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 829, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_abs); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 829, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_9);
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
        __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_output); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 829, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        __pyx_t_7 = __Pyx_PyObject_GetItem(__pyx_t_3, __pyx_v_i); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 829, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_7);
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
        __pyx_t_3 = NULL;
        __pyx_t_6 = 0;
        if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_9))) {
          __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_9);
          if (likely(__pyx_t_3)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_9);
            __Pyx_INCREF(__pyx_t_3);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_9, function);
            __pyx_t_6 = 1;
          }
        }
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_t_7};
          __pyx_t_5 = __Pyx_PyObject_FastCall(__pyx_t_9, __pyx_callargs+1-__pyx_t_6, 1+__pyx_t_6);
          __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
          if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 829, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_5);
          __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
        }
        __Pyx_XDECREF_SET(__pyx_v_mabs, __pyx_t_5);
        __pyx_t_5 = 0;
+0830:                     vals[i] = np.amax(mabs)
        __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_np); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 830, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_9);
        __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_amax); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 830, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_7);
        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
        __pyx_t_9 = NULL;
        __pyx_t_6 = 0;
        if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_7))) {
          __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_7);
          if (likely(__pyx_t_9)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7);
            __Pyx_INCREF(__pyx_t_9);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_7, function);
            __pyx_t_6 = 1;
          }
        }
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_9, __pyx_v_mabs};
          __pyx_t_5 = __Pyx_PyObject_FastCall(__pyx_t_7, __pyx_callargs+1-__pyx_t_6, 1+__pyx_t_6);
          __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
          if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 830, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_5);
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
        }
        if (unlikely((PyObject_SetItem(__pyx_v_vals, __pyx_v_i, __pyx_t_5) < 0))) __PYX_ERR(0, 830, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+0831:                     times[i] = np.argmax(mabs)
        __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_np); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 831, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_7);
        __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_argmax); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 831, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_9);
        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
        __pyx_t_7 = NULL;
        __pyx_t_6 = 0;
        if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_9))) {
          __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_9);
          if (likely(__pyx_t_7)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_9);
            __Pyx_INCREF(__pyx_t_7);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_9, function);
            __pyx_t_6 = 1;
          }
        }
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_v_mabs};
          __pyx_t_5 = __Pyx_PyObject_FastCall(__pyx_t_9, __pyx_callargs+1-__pyx_t_6, 1+__pyx_t_6);
          __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
          if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 831, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_5);
          __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
        }
        if (unlikely((PyObject_SetItem(__pyx_v_times, __pyx_v_i, __pyx_t_5) < 0))) __PYX_ERR(0, 831, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+0832:                 statstr += f"maxamp: {vals} {times} "
      __pyx_t_8 = PyTuple_New(5); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 832, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __pyx_t_14 = 0;
      __pyx_t_15 = 127;
      __Pyx_INCREF(__pyx_kp_u_maxamp_2);
      __pyx_t_14 += 8;
      __Pyx_GIVEREF(__pyx_kp_u_maxamp_2);
      PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_kp_u_maxamp_2);
      __pyx_t_5 = __Pyx_PyObject_FormatSimple(__pyx_v_vals, __pyx_empty_unicode); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 832, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_15 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_5) > __pyx_t_15) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_5) : __pyx_t_15;
      __pyx_t_14 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_5);
      __Pyx_GIVEREF(__pyx_t_5);
      PyTuple_SET_ITEM(__pyx_t_8, 1, __pyx_t_5);
      __pyx_t_5 = 0;
      __Pyx_INCREF(__pyx_kp_u__17);
      __pyx_t_14 += 1;
      __Pyx_GIVEREF(__pyx_kp_u__17);
      PyTuple_SET_ITEM(__pyx_t_8, 2, __pyx_kp_u__17);
      __pyx_t_5 = __Pyx_PyObject_FormatSimple(__pyx_v_times, __pyx_empty_unicode); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 832, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_15 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_5) > __pyx_t_15) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_5) : __pyx_t_15;
      __pyx_t_14 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_5);
      __Pyx_GIVEREF(__pyx_t_5);
      PyTuple_SET_ITEM(__pyx_t_8, 3, __pyx_t_5);
      __pyx_t_5 = 0;
      __Pyx_INCREF(__pyx_kp_u__17);
      __pyx_t_14 += 1;
      __Pyx_GIVEREF(__pyx_kp_u__17);
      PyTuple_SET_ITEM(__pyx_t_8, 4, __pyx_kp_u__17);
      __pyx_t_5 = __Pyx_PyUnicode_Join(__pyx_t_8, 5, __pyx_t_14, __pyx_t_15); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 832, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __pyx_t_8 = PyNumber_InPlaceAdd(__pyx_v_statstr, __pyx_t_5); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 832, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_DECREF_SET(__pyx_v_statstr, __pyx_t_8);
      __pyx_t_8 = 0;
    }
    __pyx_L11:;
 0833: 
 0834: 
+0835:             if self.scaled_by or self.scaled_to:
    __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_scaled_by); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 835, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __pyx_t_17 = __Pyx_PyObject_IsTrue(__pyx_t_8); if (unlikely((__pyx_t_17 < 0))) __PYX_ERR(0, 835, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    if (!__pyx_t_17) {
    } else {
      __pyx_t_4 = __pyx_t_17;
      goto __pyx_L16_bool_binop_done;
    }
    __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_scaled_to); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 835, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __pyx_t_17 = __Pyx_PyObject_IsTrue(__pyx_t_8); if (unlikely((__pyx_t_17 < 0))) __PYX_ERR(0, 835, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __pyx_t_4 = __pyx_t_17;
    __pyx_L16_bool_binop_done:;
    if (__pyx_t_4) {
/* … */
    }
+0836:                 statstr += "(before scaling) "
      __pyx_t_8 = PyNumber_InPlaceAdd(__pyx_v_statstr, __pyx_kp_s_before_scaling); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 836, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_DECREF_SET(__pyx_v_statstr, __pyx_t_8);
      __pyx_t_8 = 0;
 0837: 
+0838:             statstr += f"compute time: {toc - self.tic:0.8f} seconds. "
    __pyx_t_8 = PyTuple_New(3); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 838, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __pyx_t_14 = 0;
    __pyx_t_15 = 127;
    __Pyx_INCREF(__pyx_kp_u_compute_time);
    __pyx_t_14 += 14;
    __Pyx_GIVEREF(__pyx_kp_u_compute_time);
    PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_kp_u_compute_time);
    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_tic); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 838, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_9 = PyNumber_Subtract(__pyx_v_toc, __pyx_t_5); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 838, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_5 = __Pyx_PyObject_Format(__pyx_t_9, __pyx_kp_u_0_8f); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 838, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    __pyx_t_15 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_5) > __pyx_t_15) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_5) : __pyx_t_15;
    __pyx_t_14 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_5);
    __Pyx_GIVEREF(__pyx_t_5);
    PyTuple_SET_ITEM(__pyx_t_8, 1, __pyx_t_5);
    __pyx_t_5 = 0;
    __Pyx_INCREF(__pyx_kp_u_seconds);
    __pyx_t_14 += 10;
    __Pyx_GIVEREF(__pyx_kp_u_seconds);
    PyTuple_SET_ITEM(__pyx_t_8, 2, __pyx_kp_u_seconds);
    __pyx_t_5 = __Pyx_PyUnicode_Join(__pyx_t_8, 3, __pyx_t_14, __pyx_t_15); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 838, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __pyx_t_8 = PyNumber_InPlaceAdd(__pyx_v_statstr, __pyx_t_5); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 838, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF_SET(__pyx_v_statstr, __pyx_t_8);
    __pyx_t_8 = 0;
 0839: 
 0840: 
+0841:             if self.reverb_to_file:
    __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_reverb_to_file); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 841, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_8); if (unlikely((__pyx_t_4 < 0))) __PYX_ERR(0, 841, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    if (__pyx_t_4) {
/* … */
      goto __pyx_L18;
    }
+0842:                     chans = clm_channels(self.revfile)
      __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_clm_channels); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 842, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_revfile); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 842, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __pyx_t_7 = NULL;
      __pyx_t_6 = 0;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) {
        __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_5);
        if (likely(__pyx_t_7)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
          __Pyx_INCREF(__pyx_t_7);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_5, function);
          __pyx_t_6 = 1;
        }
      }
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_t_9};
        __pyx_t_8 = __Pyx_PyObject_FastCall(__pyx_t_5, __pyx_callargs+1-__pyx_t_6, 1+__pyx_t_6);
        __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
        if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 842, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_8);
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      }
      __Pyx_DECREF_SET(__pyx_v_chans, __pyx_t_8);
      __pyx_t_8 = 0;
+0843:                     vals = np.zeros(chans, dtype=np.double)
      __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 843, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_zeros); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 843, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __pyx_t_8 = PyTuple_New(1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 843, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_INCREF(__pyx_v_chans);
      __Pyx_GIVEREF(__pyx_v_chans);
      PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_v_chans);
      __pyx_t_9 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 843, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_np); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 843, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_double); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 843, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      if (PyDict_SetItem(__pyx_t_9, __pyx_n_s_dtype, __pyx_t_3) < 0) __PYX_ERR(0, 843, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_8, __pyx_t_9); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 843, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      __Pyx_DECREF_SET(__pyx_v_vals, __pyx_t_3);
      __pyx_t_3 = 0;
+0844:                     times = np.zeros(chans, dtype=np.int_)
      __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 844, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_zeros); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 844, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 844, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_INCREF(__pyx_v_chans);
      __Pyx_GIVEREF(__pyx_v_chans);
      PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_chans);
      __pyx_t_8 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 844, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_np); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 844, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_int); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 844, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      if (PyDict_SetItem(__pyx_t_8, __pyx_n_s_dtype, __pyx_t_7) < 0) __PYX_ERR(0, 844, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_9, __pyx_t_3, __pyx_t_8); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 844, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __Pyx_DECREF_SET(__pyx_v_times, __pyx_t_7);
      __pyx_t_7 = 0;
+0845:                     vals_view = vals
      __pyx_t_1 = __Pyx_PyObject_to_MemoryviewSlice_ds_nn_mus_float_t(__pyx_v_vals, PyBUF_WRITABLE); if (unlikely(!__pyx_t_1.memview)) __PYX_ERR(0, 845, __pyx_L1_error)
      __PYX_XCLEAR_MEMVIEW(&__pyx_v_vals_view, 1);
      __pyx_v_vals_view = __pyx_t_1;
      __pyx_t_1.memview = NULL;
      __pyx_t_1.data = NULL;
+0846:                     times_view = times
      __pyx_t_2 = __Pyx_PyObject_to_MemoryviewSlice_ds_nn_mus_long_t(__pyx_v_times, PyBUF_WRITABLE); if (unlikely(!__pyx_t_2.memview)) __PYX_ERR(0, 846, __pyx_L1_error)
      __PYX_XCLEAR_MEMVIEW(&__pyx_v_times_view, 1);
      __pyx_v_times_view = __pyx_t_2;
      __pyx_t_2.memview = NULL;
      __pyx_t_2.data = NULL;
+0847:                     maxamp = csndlib.mus_sound_maxamps(self.revfile, chans, &vals_view[0], &times_view[0])
      __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_revfile); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 847, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __pyx_t_10 = __Pyx_PyObject_AsString(__pyx_t_7); if (unlikely((!__pyx_t_10) && PyErr_Occurred())) __PYX_ERR(0, 847, __pyx_L1_error)
      __pyx_t_6 = __Pyx_PyInt_As_int(__pyx_v_chans); if (unlikely((__pyx_t_6 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 847, __pyx_L1_error)
      __pyx_t_13 = 0;
      __pyx_t_12 = -1;
      if (__pyx_t_13 < 0) {
        __pyx_t_13 += __pyx_v_vals_view.shape[0];
        if (unlikely(__pyx_t_13 < 0)) __pyx_t_12 = 0;
      } else if (unlikely(__pyx_t_13 >= __pyx_v_vals_view.shape[0])) __pyx_t_12 = 0;
      if (unlikely(__pyx_t_12 != -1)) {
        __Pyx_RaiseBufferIndexError(__pyx_t_12);
        __PYX_ERR(0, 847, __pyx_L1_error)
      }
      __pyx_t_11 = 0;
      __pyx_t_12 = -1;
      if (__pyx_t_11 < 0) {
        __pyx_t_11 += __pyx_v_times_view.shape[0];
        if (unlikely(__pyx_t_11 < 0)) __pyx_t_12 = 0;
      } else if (unlikely(__pyx_t_11 >= __pyx_v_times_view.shape[0])) __pyx_t_12 = 0;
      if (unlikely(__pyx_t_12 != -1)) {
        __Pyx_RaiseBufferIndexError(__pyx_t_12);
        __PYX_ERR(0, 847, __pyx_L1_error)
      }
      __pyx_v_maxamp = mus_sound_maxamps(__pyx_t_10, __pyx_t_6, (&(*((mus_float_t *) ( /* dim=0 */ (__pyx_v_vals_view.data + __pyx_t_13 * __pyx_v_vals_view.strides[0]) )))), (&(*((mus_long_t *) ( /* dim=0 */ (__pyx_v_times_view.data + __pyx_t_11 * __pyx_v_times_view.strides[0]) )))));
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+0848:                     statstr += f"revmax: {vals} {times}"
      __pyx_t_7 = PyTuple_New(4); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 848, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __pyx_t_14 = 0;
      __pyx_t_15 = 127;
      __Pyx_INCREF(__pyx_kp_u_revmax);
      __pyx_t_14 += 8;
      __Pyx_GIVEREF(__pyx_kp_u_revmax);
      PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_kp_u_revmax);
      __pyx_t_8 = __Pyx_PyObject_FormatSimple(__pyx_v_vals, __pyx_empty_unicode); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 848, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __pyx_t_15 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_8) > __pyx_t_15) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_8) : __pyx_t_15;
      __pyx_t_14 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_8);
      __Pyx_GIVEREF(__pyx_t_8);
      PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_8);
      __pyx_t_8 = 0;
      __Pyx_INCREF(__pyx_kp_u__17);
      __pyx_t_14 += 1;
      __Pyx_GIVEREF(__pyx_kp_u__17);
      PyTuple_SET_ITEM(__pyx_t_7, 2, __pyx_kp_u__17);
      __pyx_t_8 = __Pyx_PyObject_FormatSimple(__pyx_v_times, __pyx_empty_unicode); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 848, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __pyx_t_15 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_8) > __pyx_t_15) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_8) : __pyx_t_15;
      __pyx_t_14 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_8);
      __Pyx_GIVEREF(__pyx_t_8);
      PyTuple_SET_ITEM(__pyx_t_7, 3, __pyx_t_8);
      __pyx_t_8 = 0;
      __pyx_t_8 = __Pyx_PyUnicode_Join(__pyx_t_7, 4, __pyx_t_14, __pyx_t_15); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 848, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      __pyx_t_7 = PyNumber_InPlaceAdd(__pyx_v_statstr, __pyx_t_8); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 848, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __Pyx_DECREF_SET(__pyx_v_statstr, __pyx_t_7);
      __pyx_t_7 = 0;
+0849:             elif self.reverb and not self.reverb_to_file and is_list_or_ndarray(self.output):
    __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_reverb); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 849, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __pyx_t_17 = __Pyx_PyObject_IsTrue(__pyx_t_7); if (unlikely((__pyx_t_17 < 0))) __PYX_ERR(0, 849, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    if (__pyx_t_17) {
    } else {
      __pyx_t_4 = __pyx_t_17;
      goto __pyx_L19_bool_binop_done;
    }
    __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_reverb_to_file); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 849, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __pyx_t_17 = __Pyx_PyObject_IsTrue(__pyx_t_7); if (unlikely((__pyx_t_17 < 0))) __PYX_ERR(0, 849, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __pyx_t_18 = (!__pyx_t_17);
    if (__pyx_t_18) {
    } else {
      __pyx_t_4 = __pyx_t_18;
      goto __pyx_L19_bool_binop_done;
    }
    __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_output); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 849, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __pyx_t_8 = __pyx_f_8pysndlib_3clm_is_list_or_ndarray(__pyx_t_7, 0); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 849, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __pyx_t_18 = __Pyx_PyObject_IsTrue(__pyx_t_8); if (unlikely((__pyx_t_18 < 0))) __PYX_ERR(0, 849, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __pyx_t_4 = __pyx_t_18;
    __pyx_L19_bool_binop_done:;
    if (__pyx_t_4) {
/* … */
    }
    __pyx_L18:;
+0850:                 chans = clm_channels(CLM.reverb)
      __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_clm_channels); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 850, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_CLM); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 850, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_reverb); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 850, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __pyx_t_3 = NULL;
      __pyx_t_6 = 0;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_7))) {
        __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_7);
        if (likely(__pyx_t_3)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7);
          __Pyx_INCREF(__pyx_t_3);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_7, function);
          __pyx_t_6 = 1;
        }
      }
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_t_9};
        __pyx_t_8 = __Pyx_PyObject_FastCall(__pyx_t_7, __pyx_callargs+1-__pyx_t_6, 1+__pyx_t_6);
        __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
        if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 850, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_8);
        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      }
      __Pyx_DECREF_SET(__pyx_v_chans, __pyx_t_8);
      __pyx_t_8 = 0;
 0851: 
+0852:                 vals = np.zeros(chans, dtype=np.double)
      __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 852, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_zeros); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 852, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __pyx_t_8 = PyTuple_New(1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 852, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_INCREF(__pyx_v_chans);
      __Pyx_GIVEREF(__pyx_v_chans);
      PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_v_chans);
      __pyx_t_9 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 852, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 852, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_double); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 852, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      if (PyDict_SetItem(__pyx_t_9, __pyx_n_s_dtype, __pyx_t_5) < 0) __PYX_ERR(0, 852, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_8, __pyx_t_9); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 852, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      __Pyx_DECREF_SET(__pyx_v_vals, __pyx_t_5);
      __pyx_t_5 = 0;
+0853:                 times = np.zeros(chans, dtype=np.int_)
      __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_np); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 853, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_zeros); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 853, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 853, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_INCREF(__pyx_v_chans);
      __Pyx_GIVEREF(__pyx_v_chans);
      PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_v_chans);
      __pyx_t_8 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 853, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_np); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 853, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_int); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 853, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      if (PyDict_SetItem(__pyx_t_8, __pyx_n_s_dtype, __pyx_t_3) < 0) __PYX_ERR(0, 853, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_9, __pyx_t_5, __pyx_t_8); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 853, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __Pyx_DECREF_SET(__pyx_v_times, __pyx_t_3);
      __pyx_t_3 = 0;
+0854:                 for i in range(chans):
      __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_builtin_range, __pyx_v_chans); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 854, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      if (likely(PyList_CheckExact(__pyx_t_3)) || PyTuple_CheckExact(__pyx_t_3)) {
        __pyx_t_8 = __pyx_t_3; __Pyx_INCREF(__pyx_t_8); __pyx_t_14 = 0;
        __pyx_t_16 = NULL;
      } else {
        __pyx_t_14 = -1; __pyx_t_8 = PyObject_GetIter(__pyx_t_3); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 854, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_8);
        __pyx_t_16 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_8); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 854, __pyx_L1_error)
      }
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      for (;;) {
        if (likely(!__pyx_t_16)) {
          if (likely(PyList_CheckExact(__pyx_t_8))) {
            if (__pyx_t_14 >= PyList_GET_SIZE(__pyx_t_8)) break;
            #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
            __pyx_t_3 = PyList_GET_ITEM(__pyx_t_8, __pyx_t_14); __Pyx_INCREF(__pyx_t_3); __pyx_t_14++; if (unlikely((0 < 0))) __PYX_ERR(0, 854, __pyx_L1_error)
            #else
            __pyx_t_3 = PySequence_ITEM(__pyx_t_8, __pyx_t_14); __pyx_t_14++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 854, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_3);
            #endif
          } else {
            if (__pyx_t_14 >= PyTuple_GET_SIZE(__pyx_t_8)) break;
            #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
            __pyx_t_3 = PyTuple_GET_ITEM(__pyx_t_8, __pyx_t_14); __Pyx_INCREF(__pyx_t_3); __pyx_t_14++; if (unlikely((0 < 0))) __PYX_ERR(0, 854, __pyx_L1_error)
            #else
            __pyx_t_3 = PySequence_ITEM(__pyx_t_8, __pyx_t_14); __pyx_t_14++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 854, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_3);
            #endif
          }
        } else {
          __pyx_t_3 = __pyx_t_16(__pyx_t_8);
          if (unlikely(!__pyx_t_3)) {
            PyObject* exc_type = PyErr_Occurred();
            if (exc_type) {
              if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
              else __PYX_ERR(0, 854, __pyx_L1_error)
            }
            break;
          }
          __Pyx_GOTREF(__pyx_t_3);
        }
        __Pyx_XDECREF_SET(__pyx_v_i, __pyx_t_3);
        __pyx_t_3 = 0;
/* … */
      }
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+0855:                     mabs = np.abs(CLM.reverb[i])
        __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_np); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 855, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_abs); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 855, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_9);
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
        __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_CLM); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 855, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_reverb); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 855, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_7);
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
        __pyx_t_5 = __Pyx_PyObject_GetItem(__pyx_t_7, __pyx_v_i); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 855, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
        __pyx_t_7 = NULL;
        __pyx_t_6 = 0;
        if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_9))) {
          __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_9);
          if (likely(__pyx_t_7)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_9);
            __Pyx_INCREF(__pyx_t_7);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_9, function);
            __pyx_t_6 = 1;
          }
        }
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_t_5};
          __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_9, __pyx_callargs+1-__pyx_t_6, 1+__pyx_t_6);
          __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
          __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
          if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 855, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_3);
          __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
        }
        __Pyx_XDECREF_SET(__pyx_v_mabs, __pyx_t_3);
        __pyx_t_3 = 0;
+0856:                     vals[i] = np.amax(mabs)
        __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_np); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 856, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_9);
        __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_amax); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 856, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
        __pyx_t_9 = NULL;
        __pyx_t_6 = 0;
        if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) {
          __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_5);
          if (likely(__pyx_t_9)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
            __Pyx_INCREF(__pyx_t_9);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_5, function);
            __pyx_t_6 = 1;
          }
        }
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_9, __pyx_v_mabs};
          __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_5, __pyx_callargs+1-__pyx_t_6, 1+__pyx_t_6);
          __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
          if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 856, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_3);
          __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
        }
        if (unlikely((PyObject_SetItem(__pyx_v_vals, __pyx_v_i, __pyx_t_3) < 0))) __PYX_ERR(0, 856, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+0857:                     times[i] = np.argmax(mabs)
        __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_np); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 857, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_argmax); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 857, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_9);
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
        __pyx_t_5 = NULL;
        __pyx_t_6 = 0;
        if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_9))) {
          __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_9);
          if (likely(__pyx_t_5)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_9);
            __Pyx_INCREF(__pyx_t_5);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_9, function);
            __pyx_t_6 = 1;
          }
        }
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_v_mabs};
          __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_9, __pyx_callargs+1-__pyx_t_6, 1+__pyx_t_6);
          __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
          if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 857, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_3);
          __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
        }
        if (unlikely((PyObject_SetItem(__pyx_v_times, __pyx_v_i, __pyx_t_3) < 0))) __PYX_ERR(0, 857, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+0858:                 statstr += f"revmax: {vals} {times}"
      __pyx_t_8 = PyTuple_New(4); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 858, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __pyx_t_14 = 0;
      __pyx_t_15 = 127;
      __Pyx_INCREF(__pyx_kp_u_revmax);
      __pyx_t_14 += 8;
      __Pyx_GIVEREF(__pyx_kp_u_revmax);
      PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_kp_u_revmax);
      __pyx_t_3 = __Pyx_PyObject_FormatSimple(__pyx_v_vals, __pyx_empty_unicode); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 858, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_15 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_3) > __pyx_t_15) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_3) : __pyx_t_15;
      __pyx_t_14 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_3);
      __Pyx_GIVEREF(__pyx_t_3);
      PyTuple_SET_ITEM(__pyx_t_8, 1, __pyx_t_3);
      __pyx_t_3 = 0;
      __Pyx_INCREF(__pyx_kp_u__17);
      __pyx_t_14 += 1;
      __Pyx_GIVEREF(__pyx_kp_u__17);
      PyTuple_SET_ITEM(__pyx_t_8, 2, __pyx_kp_u__17);
      __pyx_t_3 = __Pyx_PyObject_FormatSimple(__pyx_v_times, __pyx_empty_unicode); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 858, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_15 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_3) > __pyx_t_15) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_3) : __pyx_t_15;
      __pyx_t_14 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_3);
      __Pyx_GIVEREF(__pyx_t_3);
      PyTuple_SET_ITEM(__pyx_t_8, 3, __pyx_t_3);
      __pyx_t_3 = 0;
      __pyx_t_3 = __Pyx_PyUnicode_Join(__pyx_t_8, 4, __pyx_t_14, __pyx_t_15); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 858, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __pyx_t_8 = PyNumber_InPlaceAdd(__pyx_v_statstr, __pyx_t_3); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 858, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_DECREF_SET(__pyx_v_statstr, __pyx_t_8);
      __pyx_t_8 = 0;
 0859: 
+0860:             print(statstr)
    __pyx_t_8 = __Pyx_PyObject_CallOneArg(__pyx_builtin_print, __pyx_v_statstr); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 860, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 0861: 
+0862:         if self.scaled_to:
  __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_scaled_to); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 862, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_8); if (unlikely((__pyx_t_4 < 0))) __PYX_ERR(0, 862, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  if (__pyx_t_4) {
/* … */
    goto __pyx_L25;
  }
+0863:             if self.output_to_file:
    __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_output_to_file); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 863, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_8); if (unlikely((__pyx_t_4 < 0))) __PYX_ERR(0, 863, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    if (__pyx_t_4) {
/* … */
      goto __pyx_L26;
    }
+0864:                 arr, _ = file2ndarray(self.output)
      __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_output); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 864, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      if (!(likely(PyString_CheckExact(__pyx_t_8))||((__pyx_t_8) == Py_None) || __Pyx_RaiseUnexpectedTypeError("str", __pyx_t_8))) __PYX_ERR(0, 864, __pyx_L1_error)
      __pyx_t_3 = __pyx_f_8pysndlib_3clm_file2ndarray(((PyObject*)__pyx_t_8), 0, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 864, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      if ((likely(PyTuple_CheckExact(__pyx_t_3))) || (PyList_CheckExact(__pyx_t_3))) {
        PyObject* sequence = __pyx_t_3;
        Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
        if (unlikely(size != 2)) {
          if (size > 2) __Pyx_RaiseTooManyValuesError(2);
          else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
          __PYX_ERR(0, 864, __pyx_L1_error)
        }
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        if (likely(PyTuple_CheckExact(sequence))) {
          __pyx_t_8 = PyTuple_GET_ITEM(sequence, 0); 
          __pyx_t_9 = PyTuple_GET_ITEM(sequence, 1); 
        } else {
          __pyx_t_8 = PyList_GET_ITEM(sequence, 0); 
          __pyx_t_9 = PyList_GET_ITEM(sequence, 1); 
        }
        __Pyx_INCREF(__pyx_t_8);
        __Pyx_INCREF(__pyx_t_9);
        #else
        __pyx_t_8 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 864, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_8);
        __pyx_t_9 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 864, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_9);
        #endif
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      } else {
        Py_ssize_t index = -1;
        __pyx_t_5 = PyObject_GetIter(__pyx_t_3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 864, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
        __pyx_t_19 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_5);
        index = 0; __pyx_t_8 = __pyx_t_19(__pyx_t_5); if (unlikely(!__pyx_t_8)) goto __pyx_L27_unpacking_failed;
        __Pyx_GOTREF(__pyx_t_8);
        index = 1; __pyx_t_9 = __pyx_t_19(__pyx_t_5); if (unlikely(!__pyx_t_9)) goto __pyx_L27_unpacking_failed;
        __Pyx_GOTREF(__pyx_t_9);
        if (__Pyx_IternextUnpackEndCheck(__pyx_t_19(__pyx_t_5), 2) < 0) __PYX_ERR(0, 864, __pyx_L1_error)
        __pyx_t_19 = NULL;
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
        goto __pyx_L28_unpacking_done;
        __pyx_L27_unpacking_failed:;
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
        __pyx_t_19 = NULL;
        if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
        __PYX_ERR(0, 864, __pyx_L1_error)
        __pyx_L28_unpacking_done:;
      }
      __pyx_v_arr = __pyx_t_8;
      __pyx_t_8 = 0;
      __pyx_v__ = __pyx_t_9;
      __pyx_t_9 = 0;
+0865:                 arr *= (self.scaled_to / np.max(np.abs(arr)))
      __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_scaled_to); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 865, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 865, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_max); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 865, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_np); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 865, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __pyx_t_20 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_abs); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 865, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_20);
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      __pyx_t_7 = NULL;
      __pyx_t_6 = 0;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_20))) {
        __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_20);
        if (likely(__pyx_t_7)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_20);
          __Pyx_INCREF(__pyx_t_7);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_20, function);
          __pyx_t_6 = 1;
        }
      }
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_v_arr};
        __pyx_t_8 = __Pyx_PyObject_FastCall(__pyx_t_20, __pyx_callargs+1-__pyx_t_6, 1+__pyx_t_6);
        __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
        if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 865, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_8);
        __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
      }
      __pyx_t_20 = NULL;
      __pyx_t_6 = 0;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) {
        __pyx_t_20 = PyMethod_GET_SELF(__pyx_t_5);
        if (likely(__pyx_t_20)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
          __Pyx_INCREF(__pyx_t_20);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_5, function);
          __pyx_t_6 = 1;
        }
      }
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_20, __pyx_t_8};
        __pyx_t_9 = __Pyx_PyObject_FastCall(__pyx_t_5, __pyx_callargs+1-__pyx_t_6, 1+__pyx_t_6);
        __Pyx_XDECREF(__pyx_t_20); __pyx_t_20 = 0;
        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
        if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 865, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_9);
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      }
      __pyx_t_5 = __Pyx_PyNumber_Divide(__pyx_t_3, __pyx_t_9); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 865, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      __pyx_t_9 = PyNumber_InPlaceMultiply(__pyx_v_arr, __pyx_t_5); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 865, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_DECREF_SET(__pyx_v_arr, __pyx_t_9);
      __pyx_t_9 = 0;
 0866:                 # handle error
+0867:                 ndarray2file(self.output, arr)
      __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_output); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 867, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      if (!(likely(PyString_CheckExact(__pyx_t_9))||((__pyx_t_9) == Py_None) || __Pyx_RaiseUnexpectedTypeError("str", __pyx_t_9))) __PYX_ERR(0, 867, __pyx_L1_error)
      __pyx_t_5 = __pyx_f_8pysndlib_3clm_ndarray2file(((PyObject*)__pyx_t_9), __pyx_v_arr, 0, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 867, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 0868:             else:
+0869:                 self.output *= (self.scaled_to / np.max(np.abs(self.output)))
    /*else*/ {
      __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_output); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 869, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_scaled_to); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 869, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 869, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __pyx_t_20 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_max); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 869, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_20);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_np); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 869, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __pyx_t_21 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_abs); if (unlikely(!__pyx_t_21)) __PYX_ERR(0, 869, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_21);
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_output); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 869, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __pyx_t_22 = NULL;
      __pyx_t_6 = 0;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_21))) {
        __pyx_t_22 = PyMethod_GET_SELF(__pyx_t_21);
        if (likely(__pyx_t_22)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_21);
          __Pyx_INCREF(__pyx_t_22);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_21, function);
          __pyx_t_6 = 1;
        }
      }
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_22, __pyx_t_7};
        __pyx_t_8 = __Pyx_PyObject_FastCall(__pyx_t_21, __pyx_callargs+1-__pyx_t_6, 1+__pyx_t_6);
        __Pyx_XDECREF(__pyx_t_22); __pyx_t_22 = 0;
        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
        if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 869, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_8);
        __Pyx_DECREF(__pyx_t_21); __pyx_t_21 = 0;
      }
      __pyx_t_21 = NULL;
      __pyx_t_6 = 0;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_20))) {
        __pyx_t_21 = PyMethod_GET_SELF(__pyx_t_20);
        if (likely(__pyx_t_21)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_20);
          __Pyx_INCREF(__pyx_t_21);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_20, function);
          __pyx_t_6 = 1;
        }
      }
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_21, __pyx_t_8};
        __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_20, __pyx_callargs+1-__pyx_t_6, 1+__pyx_t_6);
        __Pyx_XDECREF(__pyx_t_21); __pyx_t_21 = 0;
        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
        if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 869, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
      }
      __pyx_t_20 = __Pyx_PyNumber_Divide(__pyx_t_9, __pyx_t_3); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 869, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_20);
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __pyx_t_3 = PyNumber_InPlaceMultiply(__pyx_t_5, __pyx_t_20); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 869, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
      if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_output, __pyx_t_3) < 0) __PYX_ERR(0, 869, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    }
    __pyx_L26:;
+0870:         elif self.scaled_by:
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_scaled_by); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 870, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely((__pyx_t_4 < 0))) __PYX_ERR(0, 870, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (__pyx_t_4) {
/* … */
  }
  __pyx_L25:;
+0871:             if self.output_to_file:
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_output_to_file); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 871, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely((__pyx_t_4 < 0))) __PYX_ERR(0, 871, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (__pyx_t_4) {
/* … */
      goto __pyx_L29;
    }
+0872:                 arr, _ = file2ndarray(self.output)
      __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_output); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 872, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      if (!(likely(PyString_CheckExact(__pyx_t_3))||((__pyx_t_3) == Py_None) || __Pyx_RaiseUnexpectedTypeError("str", __pyx_t_3))) __PYX_ERR(0, 872, __pyx_L1_error)
      __pyx_t_20 = __pyx_f_8pysndlib_3clm_file2ndarray(((PyObject*)__pyx_t_3), 0, NULL); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 872, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_20);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      if ((likely(PyTuple_CheckExact(__pyx_t_20))) || (PyList_CheckExact(__pyx_t_20))) {
        PyObject* sequence = __pyx_t_20;
        Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
        if (unlikely(size != 2)) {
          if (size > 2) __Pyx_RaiseTooManyValuesError(2);
          else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
          __PYX_ERR(0, 872, __pyx_L1_error)
        }
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        if (likely(PyTuple_CheckExact(sequence))) {
          __pyx_t_3 = PyTuple_GET_ITEM(sequence, 0); 
          __pyx_t_5 = PyTuple_GET_ITEM(sequence, 1); 
        } else {
          __pyx_t_3 = PyList_GET_ITEM(sequence, 0); 
          __pyx_t_5 = PyList_GET_ITEM(sequence, 1); 
        }
        __Pyx_INCREF(__pyx_t_3);
        __Pyx_INCREF(__pyx_t_5);
        #else
        __pyx_t_3 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 872, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        __pyx_t_5 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 872, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        #endif
        __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
      } else {
        Py_ssize_t index = -1;
        __pyx_t_9 = PyObject_GetIter(__pyx_t_20); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 872, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_9);
        __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
        __pyx_t_19 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_9);
        index = 0; __pyx_t_3 = __pyx_t_19(__pyx_t_9); if (unlikely(!__pyx_t_3)) goto __pyx_L30_unpacking_failed;
        __Pyx_GOTREF(__pyx_t_3);
        index = 1; __pyx_t_5 = __pyx_t_19(__pyx_t_9); if (unlikely(!__pyx_t_5)) goto __pyx_L30_unpacking_failed;
        __Pyx_GOTREF(__pyx_t_5);
        if (__Pyx_IternextUnpackEndCheck(__pyx_t_19(__pyx_t_9), 2) < 0) __PYX_ERR(0, 872, __pyx_L1_error)
        __pyx_t_19 = NULL;
        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
        goto __pyx_L31_unpacking_done;
        __pyx_L30_unpacking_failed:;
        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
        __pyx_t_19 = NULL;
        if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
        __PYX_ERR(0, 872, __pyx_L1_error)
        __pyx_L31_unpacking_done:;
      }
      __pyx_v_arr = __pyx_t_3;
      __pyx_t_3 = 0;
      __pyx_v__ = __pyx_t_5;
      __pyx_t_5 = 0;
+0873:                 arr *= self.scaled_by
      __pyx_t_20 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_scaled_by); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 873, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_20);
      __pyx_t_5 = PyNumber_InPlaceMultiply(__pyx_v_arr, __pyx_t_20); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 873, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
      __Pyx_DECREF_SET(__pyx_v_arr, __pyx_t_5);
      __pyx_t_5 = 0;
+0874:                 ndarray2file(self.output, arr)
      __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_output); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 874, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      if (!(likely(PyString_CheckExact(__pyx_t_5))||((__pyx_t_5) == Py_None) || __Pyx_RaiseUnexpectedTypeError("str", __pyx_t_5))) __PYX_ERR(0, 874, __pyx_L1_error)
      __pyx_t_20 = __pyx_f_8pysndlib_3clm_ndarray2file(((PyObject*)__pyx_t_5), __pyx_v_arr, 0, NULL); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 874, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_20);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
 0875:             else:
+0876:                 self.output *= self.scaled_by
    /*else*/ {
      __pyx_t_20 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_output); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 876, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_20);
      __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_scaled_by); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 876, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_3 = PyNumber_InPlaceMultiply(__pyx_t_20, __pyx_t_5); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 876, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_output, __pyx_t_3) < 0) __PYX_ERR(0, 876, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    }
    __pyx_L29:;
 0877: 
+0878:         if self.play and self.output_to_file:
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_play); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 878, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_18 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely((__pyx_t_18 < 0))) __PYX_ERR(0, 878, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (__pyx_t_18) {
  } else {
    __pyx_t_4 = __pyx_t_18;
    goto __pyx_L33_bool_binop_done;
  }
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_output_to_file); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 878, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_18 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely((__pyx_t_18 < 0))) __PYX_ERR(0, 878, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_4 = __pyx_t_18;
  __pyx_L33_bool_binop_done:;
  if (__pyx_t_4) {
/* … */
  }
+0879:             subprocess.run([CLM.player,self.output])
    __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_subprocess); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 879, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_20 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_run); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 879, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_20);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_CLM); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 879, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_player); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 879, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_output); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 879, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_8 = PyList_New(2); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 879, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_GIVEREF(__pyx_t_9);
    PyList_SET_ITEM(__pyx_t_8, 0, __pyx_t_9);
    __Pyx_GIVEREF(__pyx_t_5);
    PyList_SET_ITEM(__pyx_t_8, 1, __pyx_t_5);
    __pyx_t_9 = 0;
    __pyx_t_5 = 0;
    __pyx_t_5 = NULL;
    __pyx_t_6 = 0;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_20))) {
      __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_20);
      if (likely(__pyx_t_5)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_20);
        __Pyx_INCREF(__pyx_t_5);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_20, function);
        __pyx_t_6 = 1;
      }
    }
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_t_8};
      __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_20, __pyx_callargs+1-__pyx_t_6, 1+__pyx_t_6);
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 879, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
    }
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 0880:         # need some safety if errors
 0881: 
+0882:         set_srate(self.old_srate)
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_old_srate); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 882, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_23 = __pyx_PyFloat_AsDouble(__pyx_t_3); if (unlikely((__pyx_t_23 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 882, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_24 = __pyx_f_8pysndlib_3clm_set_srate(__pyx_t_23, 0); if (unlikely(__pyx_t_24 == ((double)-1) && PyErr_Occurred())) __PYX_ERR(0, 882, __pyx_L1_error)
 0883: 
+0884:         if self.finalize:
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_finalize); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 884, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely((__pyx_t_4 < 0))) __PYX_ERR(0, 884, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (__pyx_t_4) {
/* … */
  }
+0885:             self.finalize(self.output)
    __pyx_t_20 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_finalize); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 885, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_20);
    __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_output); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 885, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __pyx_t_5 = NULL;
    __pyx_t_6 = 0;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_20))) {
      __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_20);
      if (likely(__pyx_t_5)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_20);
        __Pyx_INCREF(__pyx_t_5);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_20, function);
        __pyx_t_6 = 1;
      }
    }
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_t_8};
      __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_20, __pyx_callargs+1-__pyx_t_6, 1+__pyx_t_6);
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 885, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
    }
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 0886: 
 0887: 
+0888: cpdef is_list_or_ndarray(x):
static PyObject *__pyx_pw_8pysndlib_3clm_11is_list_or_ndarray(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyObject *__pyx_f_8pysndlib_3clm_is_list_or_ndarray(PyObject *__pyx_v_x, CYTHON_UNUSED int __pyx_skip_dispatch) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_list_or_ndarray", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("pysndlib.clm.is_list_or_ndarray", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_11is_list_or_ndarray(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_8pysndlib_3clm_11is_list_or_ndarray = {"is_list_or_ndarray", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_11is_list_or_ndarray, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_8pysndlib_3clm_11is_list_or_ndarray(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_x = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_list_or_ndarray (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_x,0};
    PyObject* values[1] = {0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_x)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 888, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "is_list_or_ndarray") < 0)) __PYX_ERR(0, 888, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
    }
    __pyx_v_x = values[0];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("is_list_or_ndarray", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 888, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.is_list_or_ndarray", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pysndlib_3clm_10is_list_or_ndarray(__pyx_self, __pyx_v_x);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_10is_list_or_ndarray(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_x) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_list_or_ndarray", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_8pysndlib_3clm_is_list_or_ndarray(__pyx_v_x, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 888, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pysndlib.clm.is_list_or_ndarray", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__127 = PyTuple_Pack(1, __pyx_n_s_x); if (unlikely(!__pyx_tuple__127)) __PYX_ERR(0, 888, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__127);
  __Pyx_GIVEREF(__pyx_tuple__127);
/* … */
  __pyx_t_40 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_11is_list_or_ndarray, 0, __pyx_n_s_is_list_or_ndarray, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__128)); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 888, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_is_list_or_ndarray, __pyx_t_40) < 0) __PYX_ERR(0, 888, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
  __pyx_codeobj__128 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__127, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_is_list_or_ndarray, 888, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__128)) __PYX_ERR(0, 888, __pyx_L1_error)
+0889:     return isinstance(x, list) or isinstance(x, np.ndarray)
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = PyList_Check(__pyx_v_x); 
  if (!__pyx_t_2) {
  } else {
    __pyx_t_3 = __Pyx_PyBool_FromLong(__pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 889, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_1 = __pyx_t_3;
    __pyx_t_3 = 0;
    goto __pyx_L3_bool_binop_done;
  }
  __pyx_t_2 = __Pyx_TypeCheck(__pyx_v_x, __pyx_ptype_5numpy_ndarray); 
  __pyx_t_3 = __Pyx_PyBool_FromLong(__pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 889, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_1 = __pyx_t_3;
  __pyx_t_3 = 0;
  __pyx_L3_bool_binop_done:;
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 0890: 
+0891: cpdef is_power_of_2(x):
static PyObject *__pyx_pw_8pysndlib_3clm_13is_power_of_2(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyObject *__pyx_f_8pysndlib_3clm_is_power_of_2(PyObject *__pyx_v_x, CYTHON_UNUSED int __pyx_skip_dispatch) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_power_of_2", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pysndlib.clm.is_power_of_2", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_13is_power_of_2(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_8pysndlib_3clm_13is_power_of_2 = {"is_power_of_2", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_13is_power_of_2, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_8pysndlib_3clm_13is_power_of_2(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_x = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_power_of_2 (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_x,0};
    PyObject* values[1] = {0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_x)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 891, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "is_power_of_2") < 0)) __PYX_ERR(0, 891, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
    }
    __pyx_v_x = values[0];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("is_power_of_2", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 891, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.is_power_of_2", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pysndlib_3clm_12is_power_of_2(__pyx_self, __pyx_v_x);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_12is_power_of_2(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_x) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_power_of_2", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_8pysndlib_3clm_is_power_of_2(__pyx_v_x, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 891, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pysndlib.clm.is_power_of_2", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_40 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_13is_power_of_2, 0, __pyx_n_s_is_power_of_2, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__129)); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 891, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_is_power_of_2, __pyx_t_40) < 0) __PYX_ERR(0, 891, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
/* … */
  __pyx_codeobj__129 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__127, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_is_power_of_2, 891, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__129)) __PYX_ERR(0, 891, __pyx_L1_error)
+0892:     return (((x) - 1) & (x)) == 0
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyInt_SubtractObjC(__pyx_v_x, __pyx_int_1, 1, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 892, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = PyNumber_And(__pyx_t_1, __pyx_v_x); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 892, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyInt_EqObjC(__pyx_t_2, __pyx_int_0, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 892, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 0893: 
+0894: cpdef next_power_of_2(x):
static PyObject *__pyx_pw_8pysndlib_3clm_15next_power_of_2(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyObject *__pyx_f_8pysndlib_3clm_next_power_of_2(PyObject *__pyx_v_x, CYTHON_UNUSED int __pyx_skip_dispatch) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("next_power_of_2", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("pysndlib.clm.next_power_of_2", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_15next_power_of_2(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_8pysndlib_3clm_15next_power_of_2 = {"next_power_of_2", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_15next_power_of_2, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_8pysndlib_3clm_15next_power_of_2(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_x = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("next_power_of_2 (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_x,0};
    PyObject* values[1] = {0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_x)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 894, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "next_power_of_2") < 0)) __PYX_ERR(0, 894, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
    }
    __pyx_v_x = values[0];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("next_power_of_2", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 894, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.next_power_of_2", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pysndlib_3clm_14next_power_of_2(__pyx_self, __pyx_v_x);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_14next_power_of_2(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_x) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("next_power_of_2", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_8pysndlib_3clm_next_power_of_2(__pyx_v_x, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 894, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pysndlib.clm.next_power_of_2", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_40 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_15next_power_of_2, 0, __pyx_n_s_next_power_of_2, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__130)); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 894, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_next_power_of_2, __pyx_t_40) < 0) __PYX_ERR(0, 894, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
/* … */
  __pyx_codeobj__130 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__127, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_next_power_of_2, 894, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__130)) __PYX_ERR(0, 894, __pyx_L1_error)
+0895:     return 2**int(1 + (float(math.log(x + 1)) / math.log(2.0)))
  __Pyx_XDECREF(__pyx_r);
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_math); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 895, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_log); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 895, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyInt_AddObjC(__pyx_v_x, __pyx_int_1, 1, 0, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 895, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_4 = NULL;
  __pyx_t_5 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3);
    if (likely(__pyx_t_4)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_4);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_3, function);
      __pyx_t_5 = 1;
    }
  }
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_t_2};
    __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_5, 1+__pyx_t_5);
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 895, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  }
  __pyx_t_3 = __Pyx_PyNumber_Float(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 895, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_math); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 895, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_log); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 895, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = NULL;
  __pyx_t_5 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_4);
    if (likely(__pyx_t_2)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
      __Pyx_INCREF(__pyx_t_2);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_4, function);
      __pyx_t_5 = 1;
    }
  }
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_float_2_0};
    __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_5, 1+__pyx_t_5);
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 895, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  }
  __pyx_t_4 = __Pyx_PyNumber_Divide(__pyx_t_3, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 895, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyInt_AddCObj(__pyx_int_1, __pyx_t_4, 1, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 895, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_4 = __Pyx_PyNumber_Int(__pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 895, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyNumber_PowerOf2(__pyx_int_2, __pyx_t_4, Py_None); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 895, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 0896: 
 0897: 
 0898: 
+0899: cpdef np.ndarray to_partials(harms):
static PyObject *__pyx_pw_8pysndlib_3clm_17to_partials(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyArrayObject *__pyx_f_8pysndlib_3clm_to_partials(PyObject *__pyx_v_harms, CYTHON_UNUSED int __pyx_skip_dispatch) {
  PyObject *__pyx_v_p = NULL;
  PyObject *__pyx_v_maxpartial = NULL;
  PyObject *__pyx_v_partials = NULL;
  PyObject *__pyx_v_i = NULL;
  PyArrayObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("to_partials", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_AddTraceback("pysndlib.clm.to_partials", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_p);
  __Pyx_XDECREF(__pyx_v_maxpartial);
  __Pyx_XDECREF(__pyx_v_partials);
  __Pyx_XDECREF(__pyx_v_i);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_17to_partials(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_8pysndlib_3clm_17to_partials = {"to_partials", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_17to_partials, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_8pysndlib_3clm_17to_partials(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_harms = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("to_partials (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_harms,0};
    PyObject* values[1] = {0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_harms)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 899, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "to_partials") < 0)) __PYX_ERR(0, 899, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
    }
    __pyx_v_harms = values[0];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("to_partials", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 899, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.to_partials", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pysndlib_3clm_16to_partials(__pyx_self, __pyx_v_harms);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_16to_partials(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_harms) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("to_partials", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = ((PyObject *)__pyx_f_8pysndlib_3clm_to_partials(__pyx_v_harms, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 899, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pysndlib.clm.to_partials", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__131 = PyTuple_Pack(1, __pyx_n_s_harms); if (unlikely(!__pyx_tuple__131)) __PYX_ERR(0, 899, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__131);
  __Pyx_GIVEREF(__pyx_tuple__131);
/* … */
  __pyx_t_40 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_17to_partials, 0, __pyx_n_s_to_partials, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__132)); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 899, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_to_partials, __pyx_t_40) < 0) __PYX_ERR(0, 899, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
  __pyx_codeobj__132 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__131, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_to_partials, 899, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__132)) __PYX_ERR(0, 899, __pyx_L1_error)
+0900:     if isinstance(harms, list):
  __pyx_t_1 = PyList_Check(__pyx_v_harms); 
  if (__pyx_t_1) {
/* … */
  }
+0901:         p = harms[::2]
    __pyx_t_2 = __Pyx_PyObject_GetItem(__pyx_v_harms, __pyx_slice__20); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 901, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_v_p = __pyx_t_2;
    __pyx_t_2 = 0;
/* … */
  __pyx_slice__20 = PySlice_New(Py_None, Py_None, __pyx_int_2); if (unlikely(!__pyx_slice__20)) __PYX_ERR(0, 901, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_slice__20);
  __Pyx_GIVEREF(__pyx_slice__20);
+0902:         maxpartial = max(p)
    __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_builtin_max, __pyx_v_p); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 902, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_v_maxpartial = __pyx_t_2;
    __pyx_t_2 = 0;
+0903:         partials = [0.0] * int(maxpartial+1)
    __pyx_t_2 = __Pyx_PyInt_AddObjC(__pyx_v_maxpartial, __pyx_int_1, 1, 0, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 903, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_3 = __Pyx_PyNumber_Int(__pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 903, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 903, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_INCREF(__pyx_float_0_0);
    __Pyx_GIVEREF(__pyx_float_0_0);
    PyList_SET_ITEM(__pyx_t_2, 0, __pyx_float_0_0);
    { PyObject* __pyx_temp = PyNumber_InPlaceMultiply(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_temp)) __PYX_ERR(0, 903, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_temp);
      __Pyx_DECREF(__pyx_t_2);
      __pyx_t_2 = __pyx_temp;
    }
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_v_partials = __pyx_t_2;
    __pyx_t_2 = 0;
+0904:         check_ndim(partials)
    __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_check_ndim); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 904, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_4 = NULL;
    __pyx_t_5 = 0;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
      __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3);
      if (likely(__pyx_t_4)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
        __Pyx_INCREF(__pyx_t_4);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_3, function);
        __pyx_t_5 = 1;
      }
    }
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_v_partials};
      __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_5, 1+__pyx_t_5);
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 904, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    }
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+0905:         for i in range(0, len(harms),2):
    __pyx_t_6 = PyObject_Length(__pyx_v_harms); if (unlikely(__pyx_t_6 == ((Py_ssize_t)-1))) __PYX_ERR(0, 905, __pyx_L1_error)
    __pyx_t_2 = PyInt_FromSsize_t(__pyx_t_6); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 905, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 905, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_INCREF(__pyx_int_0);
    __Pyx_GIVEREF(__pyx_int_0);
    PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_int_0);
    __Pyx_GIVEREF(__pyx_t_2);
    PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_2);
    __Pyx_INCREF(__pyx_int_2);
    __Pyx_GIVEREF(__pyx_int_2);
    PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_int_2);
    __pyx_t_2 = 0;
    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_range, __pyx_t_3, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 905, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (likely(PyList_CheckExact(__pyx_t_2)) || PyTuple_CheckExact(__pyx_t_2)) {
      __pyx_t_3 = __pyx_t_2; __Pyx_INCREF(__pyx_t_3); __pyx_t_6 = 0;
      __pyx_t_7 = NULL;
    } else {
      __pyx_t_6 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 905, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_7 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_3); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 905, __pyx_L1_error)
    }
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    for (;;) {
      if (likely(!__pyx_t_7)) {
        if (likely(PyList_CheckExact(__pyx_t_3))) {
          if (__pyx_t_6 >= PyList_GET_SIZE(__pyx_t_3)) break;
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_2 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_6); __Pyx_INCREF(__pyx_t_2); __pyx_t_6++; if (unlikely((0 < 0))) __PYX_ERR(0, 905, __pyx_L1_error)
          #else
          __pyx_t_2 = PySequence_ITEM(__pyx_t_3, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 905, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          #endif
        } else {
          if (__pyx_t_6 >= PyTuple_GET_SIZE(__pyx_t_3)) break;
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_2 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_6); __Pyx_INCREF(__pyx_t_2); __pyx_t_6++; if (unlikely((0 < 0))) __PYX_ERR(0, 905, __pyx_L1_error)
          #else
          __pyx_t_2 = PySequence_ITEM(__pyx_t_3, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 905, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          #endif
        }
      } else {
        __pyx_t_2 = __pyx_t_7(__pyx_t_3);
        if (unlikely(!__pyx_t_2)) {
          PyObject* exc_type = PyErr_Occurred();
          if (exc_type) {
            if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
            else __PYX_ERR(0, 905, __pyx_L1_error)
          }
          break;
        }
        __Pyx_GOTREF(__pyx_t_2);
      }
      __Pyx_XDECREF_SET(__pyx_v_i, __pyx_t_2);
      __pyx_t_2 = 0;
/* … */
    }
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+0906:             partials[int(harms[i])] = harms[i+1]
      __pyx_t_2 = __Pyx_PyInt_AddObjC(__pyx_v_i, __pyx_int_1, 1, 0, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 906, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_4 = __Pyx_PyObject_GetItem(__pyx_v_harms, __pyx_t_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 906, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_t_2 = __Pyx_PyObject_GetItem(__pyx_v_harms, __pyx_v_i); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 906, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_8 = __Pyx_PyNumber_Int(__pyx_t_2); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 906, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      if (unlikely((PyObject_SetItem(__pyx_v_partials, __pyx_t_8, __pyx_t_4) < 0))) __PYX_ERR(0, 906, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+0907:         return partials
    __Pyx_XDECREF((PyObject *)__pyx_r);
    if (!(likely(__Pyx_TypeTest(__pyx_v_partials, __pyx_ptype_5numpy_ndarray)))) __PYX_ERR(0, 907, __pyx_L1_error)
    __Pyx_INCREF(__pyx_v_partials);
    __pyx_r = ((PyArrayObject *)__pyx_v_partials);
    goto __pyx_L0;
+0908:     elif isinstance(harms[0], np.double):
  __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_harms, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 908, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 908, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_double); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 908, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_1 = PyObject_IsInstance(__pyx_t_3, __pyx_t_8); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 908, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  if (likely(__pyx_t_1)) {
/* … */
  }
+0909:         p = harms[::2]
    __pyx_t_8 = __Pyx_PyObject_GetItem(__pyx_v_harms, __pyx_slice__20); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 909, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __pyx_v_p = __pyx_t_8;
    __pyx_t_8 = 0;
+0910:         maxpartial = np.max(p)
    __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 910, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_max); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 910, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_3 = NULL;
    __pyx_t_5 = 0;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) {
      __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4);
      if (likely(__pyx_t_3)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
        __Pyx_INCREF(__pyx_t_3);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_4, function);
        __pyx_t_5 = 1;
      }
    }
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_v_p};
      __pyx_t_8 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_5, 1+__pyx_t_5);
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 910, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    }
    __pyx_v_maxpartial = __pyx_t_8;
    __pyx_t_8 = 0;
+0911:         partials = np.zeros(int(maxpartial)+1, dtype=np.double)
    __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 911, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_zeros); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 911, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __pyx_t_8 = __Pyx_PyNumber_Int(__pyx_v_maxpartial); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 911, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __pyx_t_3 = __Pyx_PyInt_AddObjC(__pyx_t_8, __pyx_int_1, 1, 0, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 911, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __pyx_t_8 = PyTuple_New(1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 911, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_GIVEREF(__pyx_t_3);
    PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_3);
    __pyx_t_3 = 0;
    __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 911, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 911, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_double); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 911, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_dtype, __pyx_t_9) < 0) __PYX_ERR(0, 911, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    __pyx_t_9 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_8, __pyx_t_3); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 911, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_v_partials = __pyx_t_9;
    __pyx_t_9 = 0;
+0912:         check_ndim(partials)
    __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_check_ndim); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 912, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_8 = NULL;
    __pyx_t_5 = 0;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
      __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_3);
      if (likely(__pyx_t_8)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
        __Pyx_INCREF(__pyx_t_8);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_3, function);
        __pyx_t_5 = 1;
      }
    }
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_8, __pyx_v_partials};
      __pyx_t_9 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_5, 1+__pyx_t_5);
      __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
      if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 912, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    }
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+0913:         for i in range(0, len(harms),2):
    __pyx_t_6 = PyObject_Length(__pyx_v_harms); if (unlikely(__pyx_t_6 == ((Py_ssize_t)-1))) __PYX_ERR(0, 913, __pyx_L1_error)
    __pyx_t_9 = PyInt_FromSsize_t(__pyx_t_6); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 913, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 913, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_INCREF(__pyx_int_0);
    __Pyx_GIVEREF(__pyx_int_0);
    PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_int_0);
    __Pyx_GIVEREF(__pyx_t_9);
    PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_9);
    __Pyx_INCREF(__pyx_int_2);
    __Pyx_GIVEREF(__pyx_int_2);
    PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_int_2);
    __pyx_t_9 = 0;
    __pyx_t_9 = __Pyx_PyObject_Call(__pyx_builtin_range, __pyx_t_3, NULL); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 913, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (likely(PyList_CheckExact(__pyx_t_9)) || PyTuple_CheckExact(__pyx_t_9)) {
      __pyx_t_3 = __pyx_t_9; __Pyx_INCREF(__pyx_t_3); __pyx_t_6 = 0;
      __pyx_t_7 = NULL;
    } else {
      __pyx_t_6 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_t_9); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 913, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_7 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_3); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 913, __pyx_L1_error)
    }
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    for (;;) {
      if (likely(!__pyx_t_7)) {
        if (likely(PyList_CheckExact(__pyx_t_3))) {
          if (__pyx_t_6 >= PyList_GET_SIZE(__pyx_t_3)) break;
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_9 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_6); __Pyx_INCREF(__pyx_t_9); __pyx_t_6++; if (unlikely((0 < 0))) __PYX_ERR(0, 913, __pyx_L1_error)
          #else
          __pyx_t_9 = PySequence_ITEM(__pyx_t_3, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 913, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_9);
          #endif
        } else {
          if (__pyx_t_6 >= PyTuple_GET_SIZE(__pyx_t_3)) break;
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_9 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_6); __Pyx_INCREF(__pyx_t_9); __pyx_t_6++; if (unlikely((0 < 0))) __PYX_ERR(0, 913, __pyx_L1_error)
          #else
          __pyx_t_9 = PySequence_ITEM(__pyx_t_3, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 913, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_9);
          #endif
        }
      } else {
        __pyx_t_9 = __pyx_t_7(__pyx_t_3);
        if (unlikely(!__pyx_t_9)) {
          PyObject* exc_type = PyErr_Occurred();
          if (exc_type) {
            if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
            else __PYX_ERR(0, 913, __pyx_L1_error)
          }
          break;
        }
        __Pyx_GOTREF(__pyx_t_9);
      }
      __Pyx_XDECREF_SET(__pyx_v_i, __pyx_t_9);
      __pyx_t_9 = 0;
/* … */
    }
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+0914:             partials[int(harms[i])] = harms[i+1]
      __pyx_t_9 = __Pyx_PyInt_AddObjC(__pyx_v_i, __pyx_int_1, 1, 0, 0); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 914, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __pyx_t_8 = __Pyx_PyObject_GetItem(__pyx_v_harms, __pyx_t_9); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 914, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      __pyx_t_9 = __Pyx_PyObject_GetItem(__pyx_v_harms, __pyx_v_i); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 914, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __pyx_t_4 = __Pyx_PyNumber_Int(__pyx_t_9); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 914, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      if (unlikely((PyObject_SetItem(__pyx_v_partials, __pyx_t_4, __pyx_t_8) < 0))) __PYX_ERR(0, 914, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+0915:         return partials
    __Pyx_XDECREF((PyObject *)__pyx_r);
    if (!(likely(((__pyx_v_partials) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_partials, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 915, __pyx_L1_error)
    __Pyx_INCREF(__pyx_v_partials);
    __pyx_r = ((PyArrayObject *)__pyx_v_partials);
    goto __pyx_L0;
 0916:     else:
+0917:         raise TypeError(f'{type(harms)} cannot be converted to a mus_float_array')
  /*else*/ {
    __pyx_t_3 = __Pyx_PyObject_FormatSimple(((PyObject *)Py_TYPE(__pyx_v_harms)), __pyx_empty_unicode); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 917, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_8 = __Pyx_PyUnicode_ConcatInPlace(__pyx_t_3, __pyx_kp_u_cannot_be_converted_to_a_mus_fl); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 917, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_builtin_TypeError, __pyx_t_8); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 917, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __Pyx_Raise(__pyx_t_3, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __PYX_ERR(0, 917, __pyx_L1_error)
  }
 0918: 
 0919: 
 0920: # --------------- generic functions ---------------- #
 0921: 
+0922: cpdef int mus_close(obj: mus_any):
static PyObject *__pyx_pw_8pysndlib_3clm_19mus_close(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static int __pyx_f_8pysndlib_3clm_mus_close(struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_obj, CYTHON_UNUSED int __pyx_skip_dispatch) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("mus_close", 0);
/* … */
  /* function exit code */
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_19mus_close(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_8pysndlib_3clm_19mus_close = {"mus_close", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_19mus_close, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_8pysndlib_3clm_19mus_close(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_obj = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("mus_close (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_obj,0};
    PyObject* values[1] = {0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_obj)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 922, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "mus_close") < 0)) __PYX_ERR(0, 922, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
    }
    __pyx_v_obj = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)values[0]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("mus_close", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 922, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.mus_close", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_obj), __pyx_ptype_8pysndlib_3clm_mus_any, 0, "obj", 0))) __PYX_ERR(0, 922, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pysndlib_3clm_18mus_close(__pyx_self, __pyx_v_obj);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_18mus_close(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_obj) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("mus_close", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_8pysndlib_3clm_mus_close(__pyx_v_obj, 0); if (unlikely(__pyx_t_1 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 922, __pyx_L1_error)
  __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 922, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pysndlib.clm.mus_close", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__133 = PyTuple_Pack(1, __pyx_n_s_obj); if (unlikely(!__pyx_tuple__133)) __PYX_ERR(0, 922, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__133);
  __Pyx_GIVEREF(__pyx_tuple__133);
/* … */
  __pyx_t_40 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 922, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  if (PyDict_SetItem(__pyx_t_40, __pyx_n_s_obj, __pyx_n_s_mus_any) < 0) __PYX_ERR(0, 922, __pyx_L1_error)
  __pyx_t_37 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_19mus_close, 0, __pyx_n_s_mus_close, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__134)); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 922, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_37, __pyx_t_40);
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_mus_close, __pyx_t_37) < 0) __PYX_ERR(0, 922, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
  __pyx_codeobj__134 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__133, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_mus_close, 922, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__134)) __PYX_ERR(0, 922, __pyx_L1_error)
+0923:     return cclm.mus_close_file(obj._ptr)
  __pyx_r = mus_close_file(__pyx_v_obj->_ptr);
  goto __pyx_L0;
 0924: 
+0925: cpdef bint mus_is_output(obj: mus_any):
static PyObject *__pyx_pw_8pysndlib_3clm_21mus_is_output(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static int __pyx_f_8pysndlib_3clm_mus_is_output(struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_obj, CYTHON_UNUSED int __pyx_skip_dispatch) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("mus_is_output", 0);
/* … */
  /* function exit code */
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_21mus_is_output(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_20mus_is_output, "\n    returns True if gen is a type of output\n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_21mus_is_output = {"mus_is_output", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_21mus_is_output, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_20mus_is_output};
static PyObject *__pyx_pw_8pysndlib_3clm_21mus_is_output(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_obj = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("mus_is_output (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_obj,0};
    PyObject* values[1] = {0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_obj)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 925, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "mus_is_output") < 0)) __PYX_ERR(0, 925, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
    }
    __pyx_v_obj = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)values[0]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("mus_is_output", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 925, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.mus_is_output", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_obj), __pyx_ptype_8pysndlib_3clm_mus_any, 0, "obj", 0))) __PYX_ERR(0, 925, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pysndlib_3clm_20mus_is_output(__pyx_self, __pyx_v_obj);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_20mus_is_output(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_obj) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("mus_is_output", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_8pysndlib_3clm_mus_is_output(__pyx_v_obj, 0); if (unlikely(__pyx_t_1 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 925, __pyx_L1_error)
  __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 925, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pysndlib.clm.mus_is_output", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_37 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 925, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  if (PyDict_SetItem(__pyx_t_37, __pyx_n_s_obj, __pyx_n_s_mus_any) < 0) __PYX_ERR(0, 925, __pyx_L1_error)
  __pyx_t_40 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_21mus_is_output, 0, __pyx_n_s_mus_is_output, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__135)); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 925, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_40, __pyx_t_37);
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_mus_is_output, __pyx_t_40) < 0) __PYX_ERR(0, 925, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
/* … */
  __pyx_codeobj__135 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__133, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_mus_is_output, 925, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__135)) __PYX_ERR(0, 925, __pyx_L1_error)
 0926:     """
 0927:     returns True if gen is a type of output
 0928:     """
+0929:     return cclm.mus_is_output(obj._ptr)
  __pyx_r = mus_is_output(__pyx_v_obj->_ptr);
  goto __pyx_L0;
 0930: 
+0931: cpdef bint mus_is_input(obj: mus_any):
static PyObject *__pyx_pw_8pysndlib_3clm_23mus_is_input(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static int __pyx_f_8pysndlib_3clm_mus_is_input(struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_obj, CYTHON_UNUSED int __pyx_skip_dispatch) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("mus_is_input", 0);
/* … */
  /* function exit code */
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_23mus_is_input(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_22mus_is_input, "\n    returns True if gen is a type of output\n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_23mus_is_input = {"mus_is_input", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_23mus_is_input, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_22mus_is_input};
static PyObject *__pyx_pw_8pysndlib_3clm_23mus_is_input(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_obj = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("mus_is_input (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_obj,0};
    PyObject* values[1] = {0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_obj)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 931, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "mus_is_input") < 0)) __PYX_ERR(0, 931, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
    }
    __pyx_v_obj = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)values[0]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("mus_is_input", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 931, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.mus_is_input", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_obj), __pyx_ptype_8pysndlib_3clm_mus_any, 0, "obj", 0))) __PYX_ERR(0, 931, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pysndlib_3clm_22mus_is_input(__pyx_self, __pyx_v_obj);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_22mus_is_input(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_obj) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("mus_is_input", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_8pysndlib_3clm_mus_is_input(__pyx_v_obj, 0); if (unlikely(__pyx_t_1 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 931, __pyx_L1_error)
  __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 931, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pysndlib.clm.mus_is_input", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_40 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 931, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  if (PyDict_SetItem(__pyx_t_40, __pyx_n_s_obj, __pyx_n_s_mus_any) < 0) __PYX_ERR(0, 931, __pyx_L1_error)
  __pyx_t_37 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_23mus_is_input, 0, __pyx_n_s_mus_is_input, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__136)); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 931, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_37, __pyx_t_40);
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_mus_is_input, __pyx_t_37) < 0) __PYX_ERR(0, 931, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
/* … */
  __pyx_codeobj__136 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__133, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_mus_is_input, 931, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__136)) __PYX_ERR(0, 931, __pyx_L1_error)
 0932:     """
 0933:     returns True if gen is a type of output
 0934:     """
+0935:     return cclm.mus_is_input(obj._ptr)
  __pyx_r = mus_is_input(__pyx_v_obj->_ptr);
  goto __pyx_L0;
 0936: 
 0937: 
 0938: # prepending clm to functions to avoid name clashes
 0939: 
 0940: # --------------- clm_length ---------------- #
+0941: @singledispatch
/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_25clm_length(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_8pysndlib_3clm_25clm_length = {"clm_length", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_25clm_length, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_8pysndlib_3clm_25clm_length(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  CYTHON_UNUSED PyObject *__pyx_v_x = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("clm_length (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_x,0};
    PyObject* values[1] = {0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_x)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 941, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "clm_length") < 0)) __PYX_ERR(0, 941, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
    }
    __pyx_v_x = values[0];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("clm_length", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 941, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.clm_length", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pysndlib_3clm_24clm_length(__pyx_self, __pyx_v_x);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_24clm_length(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_x) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("clm_length", 0);

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __Pyx_GetModuleGlobalName(__pyx_t_37, __pyx_n_s_singledispatch); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 941, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  __pyx_t_40 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_25clm_length, 0, __pyx_n_s_clm_length, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__137)); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 941, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  __pyx_t_41 = __Pyx_PyObject_CallOneArg(__pyx_t_37, __pyx_t_40); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 941, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_clm_length, __pyx_t_41) < 0) __PYX_ERR(0, 941, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
/* … */
  __pyx_codeobj__137 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__127, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_clm_length, 941, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__137)) __PYX_ERR(0, 941, __pyx_L1_error)
 0942: def clm_length(x):
 0943:     pass
 0944: 
+0945: @clm_length.register
/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_27_(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_8pysndlib_3clm_27_ = {"_", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_27_, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_8pysndlib_3clm_27_(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_x = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_ (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_x,0};
    PyObject* values[1] = {0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_x)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 945, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "_") < 0)) __PYX_ERR(0, 945, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
    }
    __pyx_v_x = ((PyObject*)values[0]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("_", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 945, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm._", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_x), (&PyString_Type), 0, "x", 1))) __PYX_ERR(0, 946, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pysndlib_3clm_26_(__pyx_self, __pyx_v_x);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_26_(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_x) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pysndlib.clm._", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __Pyx_GetModuleGlobalName(__pyx_t_41, __pyx_n_s_clm_length); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 945, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  __pyx_t_40 = __Pyx_PyObject_GetAttrStr(__pyx_t_41, __pyx_n_s_register); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 945, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
  __pyx_t_41 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 945, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  if (PyDict_SetItem(__pyx_t_41, __pyx_n_s_x, __pyx_n_s_str_2) < 0) __PYX_ERR(0, 945, __pyx_L1_error)
  __pyx_t_37 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_27_, 0, __pyx_n_s__124, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__138)); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 945, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_37, __pyx_t_41);
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
  __pyx_t_41 = __Pyx_PyObject_CallOneArg(__pyx_t_40, __pyx_t_37); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 945, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s__124, __pyx_t_41) < 0) __PYX_ERR(0, 945, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
/* … */
  __pyx_codeobj__138 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__127, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s__124, 945, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__138)) __PYX_ERR(0, 945, __pyx_L1_error)
 0946: def _(x: str):# assume file
+0947:     return csndlib.mus_sound_length(x)
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyObject_AsString(__pyx_v_x); if (unlikely((!__pyx_t_1) && PyErr_Occurred())) __PYX_ERR(0, 947, __pyx_L1_error)
  __pyx_t_2 = __Pyx_PyInt_From_mus_long_t(mus_sound_length(__pyx_t_1)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 947, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;
 0948: 
+0949: @clm_length.register
/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_29_(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_8pysndlib_3clm_29_ = {"_", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_29_, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_8pysndlib_3clm_29_(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_x = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_ (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_x,0};
    PyObject* values[1] = {0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_x)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 949, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "_") < 0)) __PYX_ERR(0, 949, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
    }
    __pyx_v_x = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)values[0]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("_", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 949, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm._", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_x), __pyx_ptype_8pysndlib_3clm_mus_any, 0, "x", 0))) __PYX_ERR(0, 950, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pysndlib_3clm_28_(__pyx_self, __pyx_v_x);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_28_(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_x) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pysndlib.clm._", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __Pyx_GetModuleGlobalName(__pyx_t_41, __pyx_n_s_clm_length); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 949, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  __pyx_t_37 = __Pyx_PyObject_GetAttrStr(__pyx_t_41, __pyx_n_s_register); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 949, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
  __pyx_t_41 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 949, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  if (PyDict_SetItem(__pyx_t_41, __pyx_n_s_x, __pyx_n_s_mus_any) < 0) __PYX_ERR(0, 949, __pyx_L1_error)
  __pyx_t_40 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_29_, 0, __pyx_n_s__124, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__139)); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 949, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_40, __pyx_t_41);
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
  __pyx_t_41 = __Pyx_PyObject_CallOneArg(__pyx_t_37, __pyx_t_40); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 949, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s__124, __pyx_t_41) < 0) __PYX_ERR(0, 949, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
/* … */
  __pyx_codeobj__139 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__127, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s__124, 949, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__139)) __PYX_ERR(0, 949, __pyx_L1_error)
 0950: def _(x: mus_any):# assume gen
+0951:     return x.mus_length
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_x), __pyx_n_s_mus_length); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 951, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 0952: 
+0953: @clm_length.register
/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_31_(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_8pysndlib_3clm_31_ = {"_", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_31_, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_8pysndlib_3clm_31_(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_x = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_ (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_x,0};
    PyObject* values[1] = {0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_x)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 953, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "_") < 0)) __PYX_ERR(0, 953, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
    }
    __pyx_v_x = ((PyObject*)values[0]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("_", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 953, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm._", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_x), (&PyList_Type), 0, "x", 1))) __PYX_ERR(0, 954, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pysndlib_3clm_30_(__pyx_self, __pyx_v_x);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_30_(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_x) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pysndlib.clm._", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __Pyx_GetModuleGlobalName(__pyx_t_41, __pyx_n_s_clm_length); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 953, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  __pyx_t_40 = __Pyx_PyObject_GetAttrStr(__pyx_t_41, __pyx_n_s_register); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 953, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
  __pyx_t_41 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 953, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  if (PyDict_SetItem(__pyx_t_41, __pyx_n_s_x, __pyx_n_s_list) < 0) __PYX_ERR(0, 953, __pyx_L1_error)
  __pyx_t_37 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_31_, 0, __pyx_n_s__124, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__140)); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 953, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_37, __pyx_t_41);
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
  __pyx_t_41 = __Pyx_PyObject_CallOneArg(__pyx_t_40, __pyx_t_37); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 953, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s__124, __pyx_t_41) < 0) __PYX_ERR(0, 953, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
/* … */
  __pyx_codeobj__140 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__127, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s__124, 953, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__140)) __PYX_ERR(0, 953, __pyx_L1_error)
 0954: def _(x: list):
+0955:     if isinstance(x[0], list):
  __pyx_t_1 = __Pyx_GetItemInt_List(__pyx_v_x, 0, long, 1, __Pyx_PyInt_From_long, 1, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 955, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = PyList_Check(__pyx_t_1); 
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_2) {
/* … */
  }
+0956:         return len(x[0])
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_1 = __Pyx_GetItemInt_List(__pyx_v_x, 0, long, 1, __Pyx_PyInt_From_long, 1, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 956, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_3 = PyObject_Length(__pyx_t_1); if (unlikely(__pyx_t_3 == ((Py_ssize_t)-1))) __PYX_ERR(0, 956, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_1 = PyInt_FromSsize_t(__pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 956, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_r = __pyx_t_1;
    __pyx_t_1 = 0;
    goto __pyx_L0;
 0957:     else:
+0958:         return len(x)
  /*else*/ {
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_3 = PyList_GET_SIZE(__pyx_v_x); if (unlikely(__pyx_t_3 == ((Py_ssize_t)-1))) __PYX_ERR(0, 958, __pyx_L1_error)
    __pyx_t_1 = PyInt_FromSsize_t(__pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 958, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_r = __pyx_t_1;
    __pyx_t_1 = 0;
    goto __pyx_L0;
  }
 0959: 
+0960: @clm_length.register
/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_33_(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_8pysndlib_3clm_33_ = {"_", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_33_, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_8pysndlib_3clm_33_(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyArrayObject *__pyx_v_x = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_ (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_x,0};
    PyObject* values[1] = {0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_x)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 960, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "_") < 0)) __PYX_ERR(0, 960, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
    }
    __pyx_v_x = ((PyArrayObject *)values[0]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("_", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 960, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm._", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_x), __pyx_ptype_5numpy_ndarray, 0, "x", 0))) __PYX_ERR(0, 961, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pysndlib_3clm_32_(__pyx_self, __pyx_v_x);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_32_(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_x) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("pysndlib.clm._", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __Pyx_GetModuleGlobalName(__pyx_t_41, __pyx_n_s_clm_length); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 960, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  __pyx_t_37 = __Pyx_PyObject_GetAttrStr(__pyx_t_41, __pyx_n_s_register); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 960, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
  __pyx_t_41 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 960, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  if (PyDict_SetItem(__pyx_t_41, __pyx_n_s_x, __pyx_kp_s_np_ndarray) < 0) __PYX_ERR(0, 960, __pyx_L1_error)
  __pyx_t_40 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_33_, 0, __pyx_n_s__124, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__141)); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 960, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_40, __pyx_t_41);
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
  __pyx_t_41 = __Pyx_PyObject_CallOneArg(__pyx_t_37, __pyx_t_40); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 960, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s__124, __pyx_t_41) < 0) __PYX_ERR(0, 960, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
/* … */
  __pyx_codeobj__141 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__127, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s__124, 960, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__141)) __PYX_ERR(0, 960, __pyx_L1_error)
 0961: def _(x: np.ndarray):
+0962:     if x.ndim == 1:
  __pyx_t_1 = __pyx_f_5numpy_7ndarray_4ndim_ndim(__pyx_v_x); if (unlikely(__pyx_t_1 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 962, __pyx_L1_error)
  __pyx_t_2 = (__pyx_t_1 == 1);
  if (__pyx_t_2) {
/* … */
  }
+0963:         return np.shape(x)[0]
    __Pyx_XDECREF(__pyx_r);
    __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 963, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_shape); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 963, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_4 = NULL;
    __pyx_t_1 = 0;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) {
      __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_5);
      if (likely(__pyx_t_4)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
        __Pyx_INCREF(__pyx_t_4);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_5, function);
        __pyx_t_1 = 1;
      }
    }
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_4, ((PyObject *)__pyx_v_x)};
      __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_5, __pyx_callargs+1-__pyx_t_1, 1+__pyx_t_1);
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 963, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    }
    __pyx_t_5 = __Pyx_GetItemInt(__pyx_t_3, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 963, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_r = __pyx_t_5;
    __pyx_t_5 = 0;
    goto __pyx_L0;
+0964:     elif x.ndim == 2:
  __pyx_t_1 = __pyx_f_5numpy_7ndarray_4ndim_ndim(__pyx_v_x); if (unlikely(__pyx_t_1 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 964, __pyx_L1_error)
  __pyx_t_2 = (__pyx_t_1 == 2);
  if (likely(__pyx_t_2)) {
/* … */
  }
+0965:         return np.shape(x)[1]
    __Pyx_XDECREF(__pyx_r);
    __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 965, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_shape); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 965, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_3 = NULL;
    __pyx_t_1 = 0;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) {
      __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4);
      if (likely(__pyx_t_3)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
        __Pyx_INCREF(__pyx_t_3);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_4, function);
        __pyx_t_1 = 1;
      }
    }
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_3, ((PyObject *)__pyx_v_x)};
      __pyx_t_5 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_1, 1+__pyx_t_1);
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 965, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    }
    __pyx_t_4 = __Pyx_GetItemInt(__pyx_t_5, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 965, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_r = __pyx_t_4;
    __pyx_t_4 = 0;
    goto __pyx_L0;
 0966:     else:
+0967:         raise RuntimeError(f'ndarray must have 1 or 2 dimensions not {x.ndim}. ')
  /*else*/ {
    __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 967, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_6 = 0;
    __pyx_t_7 = 127;
    __Pyx_INCREF(__pyx_kp_u_ndarray_must_have_1_or_2_dimensi);
    __pyx_t_6 += 40;
    __Pyx_GIVEREF(__pyx_kp_u_ndarray_must_have_1_or_2_dimensi);
    PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_kp_u_ndarray_must_have_1_or_2_dimensi);
    __pyx_t_1 = __pyx_f_5numpy_7ndarray_4ndim_ndim(__pyx_v_x); if (unlikely(__pyx_t_1 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 967, __pyx_L1_error)
    __pyx_t_5 = __Pyx_PyUnicode_From_int(__pyx_t_1, 0, ' ', 'd'); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 967, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_6 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_5);
    __Pyx_GIVEREF(__pyx_t_5);
    PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_5);
    __pyx_t_5 = 0;
    __Pyx_INCREF(__pyx_kp_u__13);
    __pyx_t_6 += 2;
    __Pyx_GIVEREF(__pyx_kp_u__13);
    PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_kp_u__13);
    __pyx_t_5 = __Pyx_PyUnicode_Join(__pyx_t_4, 3, __pyx_t_6, __pyx_t_7); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 967, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_4 = __Pyx_PyObject_CallOneArg(__pyx_builtin_RuntimeError, __pyx_t_5); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 967, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_Raise(__pyx_t_4, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __PYX_ERR(0, 967, __pyx_L1_error)
  }
 0968: 
 0969: 
 0970: 
 0971: # --------------- clm_channels ---------------- #
+0972: @singledispatch
/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_35clm_channels(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_8pysndlib_3clm_35clm_channels = {"clm_channels", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_35clm_channels, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_8pysndlib_3clm_35clm_channels(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  CYTHON_UNUSED PyObject *__pyx_v_x = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("clm_channels (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_x,0};
    PyObject* values[1] = {0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_x)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 972, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "clm_channels") < 0)) __PYX_ERR(0, 972, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
    }
    __pyx_v_x = values[0];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("clm_channels", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 972, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.clm_channels", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pysndlib_3clm_34clm_channels(__pyx_self, __pyx_v_x);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_34clm_channels(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_x) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("clm_channels", 0);

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __Pyx_GetModuleGlobalName(__pyx_t_41, __pyx_n_s_singledispatch); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 972, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  __pyx_t_40 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_35clm_channels, 0, __pyx_n_s_clm_channels, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__142)); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 972, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  __pyx_t_37 = __Pyx_PyObject_CallOneArg(__pyx_t_41, __pyx_t_40); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 972, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_clm_channels, __pyx_t_37) < 0) __PYX_ERR(0, 972, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
/* … */
  __pyx_codeobj__142 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__127, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_clm_channels, 972, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__142)) __PYX_ERR(0, 972, __pyx_L1_error)
 0973: def clm_channels(x):
 0974:     pass
 0975: 
+0976: @clm_channels.register
/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_37_(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_8pysndlib_3clm_37_ = {"_", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_37_, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_8pysndlib_3clm_37_(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_x = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_ (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_x,0};
    PyObject* values[1] = {0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_x)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 976, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "_") < 0)) __PYX_ERR(0, 976, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
    }
    __pyx_v_x = ((PyObject*)values[0]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("_", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 976, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm._", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_x), (&PyString_Type), 0, "x", 1))) __PYX_ERR(0, 977, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pysndlib_3clm_36_(__pyx_self, __pyx_v_x);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_36_(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_x) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pysndlib.clm._", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __Pyx_GetModuleGlobalName(__pyx_t_37, __pyx_n_s_clm_channels); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 976, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  __pyx_t_40 = __Pyx_PyObject_GetAttrStr(__pyx_t_37, __pyx_n_s_register); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 976, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
  __pyx_t_37 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 976, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  if (PyDict_SetItem(__pyx_t_37, __pyx_n_s_x, __pyx_n_s_str_2) < 0) __PYX_ERR(0, 976, __pyx_L1_error)
  __pyx_t_41 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_37_, 0, __pyx_n_s__124, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__143)); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 976, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_41, __pyx_t_37);
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
  __pyx_t_37 = __Pyx_PyObject_CallOneArg(__pyx_t_40, __pyx_t_41); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 976, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s__124, __pyx_t_37) < 0) __PYX_ERR(0, 976, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
/* … */
  __pyx_codeobj__143 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__127, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s__124, 976, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__143)) __PYX_ERR(0, 976, __pyx_L1_error)
 0977: def _(x: str):  #assume it is a file
+0978:     return csndlib.mus_sound_chans(x)
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyObject_AsString(__pyx_v_x); if (unlikely((!__pyx_t_1) && PyErr_Occurred())) __PYX_ERR(0, 978, __pyx_L1_error)
  __pyx_t_2 = __Pyx_PyInt_From_int(mus_sound_chans(__pyx_t_1)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 978, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;
 0979: 
+0980: @clm_channels.register
/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_39_(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_8pysndlib_3clm_39_ = {"_", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_39_, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_8pysndlib_3clm_39_(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_x = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_ (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_x,0};
    PyObject* values[1] = {0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_x)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 980, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "_") < 0)) __PYX_ERR(0, 980, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
    }
    __pyx_v_x = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)values[0]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("_", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 980, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm._", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_x), __pyx_ptype_8pysndlib_3clm_mus_any, 0, "x", 0))) __PYX_ERR(0, 981, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pysndlib_3clm_38_(__pyx_self, __pyx_v_x);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_38_(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_x) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pysndlib.clm._", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __Pyx_GetModuleGlobalName(__pyx_t_37, __pyx_n_s_clm_channels); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 980, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  __pyx_t_41 = __Pyx_PyObject_GetAttrStr(__pyx_t_37, __pyx_n_s_register); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 980, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
  __pyx_t_37 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 980, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  if (PyDict_SetItem(__pyx_t_37, __pyx_n_s_x, __pyx_n_s_mus_any) < 0) __PYX_ERR(0, 980, __pyx_L1_error)
  __pyx_t_40 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_39_, 0, __pyx_n_s__124, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__144)); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 980, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_40, __pyx_t_37);
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
  __pyx_t_37 = __Pyx_PyObject_CallOneArg(__pyx_t_41, __pyx_t_40); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 980, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s__124, __pyx_t_37) < 0) __PYX_ERR(0, 980, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
/* … */
  __pyx_codeobj__144 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__127, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s__124, 980, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__144)) __PYX_ERR(0, 980, __pyx_L1_error)
 0981: def _(x: mus_any):  #assume it is a gen
+0982:     return x.mus_channels
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_x), __pyx_n_s_mus_channels); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 982, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 0983: 
+0984: @clm_channels.register
/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_41_(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_8pysndlib_3clm_41_ = {"_", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_41_, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_8pysndlib_3clm_41_(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_x = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_ (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_x,0};
    PyObject* values[1] = {0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_x)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 984, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "_") < 0)) __PYX_ERR(0, 984, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
    }
    __pyx_v_x = ((PyObject*)values[0]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("_", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 984, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm._", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_x), (&PyList_Type), 0, "x", 1))) __PYX_ERR(0, 985, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pysndlib_3clm_40_(__pyx_self, __pyx_v_x);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_40_(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_x) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pysndlib.clm._", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __Pyx_GetModuleGlobalName(__pyx_t_37, __pyx_n_s_clm_channels); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 984, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  __pyx_t_40 = __Pyx_PyObject_GetAttrStr(__pyx_t_37, __pyx_n_s_register); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 984, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
  __pyx_t_37 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 984, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  if (PyDict_SetItem(__pyx_t_37, __pyx_n_s_x, __pyx_n_s_list) < 0) __PYX_ERR(0, 984, __pyx_L1_error)
  __pyx_t_41 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_41_, 0, __pyx_n_s__124, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__145)); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 984, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_41, __pyx_t_37);
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
  __pyx_t_37 = __Pyx_PyObject_CallOneArg(__pyx_t_40, __pyx_t_41); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 984, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s__124, __pyx_t_37) < 0) __PYX_ERR(0, 984, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
/* … */
  __pyx_codeobj__145 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__127, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s__124, 984, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__145)) __PYX_ERR(0, 984, __pyx_L1_error)
 0985: def _(x: list):
+0986:     return len(x)
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = PyList_GET_SIZE(__pyx_v_x); if (unlikely(__pyx_t_1 == ((Py_ssize_t)-1))) __PYX_ERR(0, 986, __pyx_L1_error)
  __pyx_t_2 = PyInt_FromSsize_t(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 986, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;
 0987: 
+0988: @clm_channels.register
/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_43_(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_8pysndlib_3clm_43_ = {"_", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_43_, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_8pysndlib_3clm_43_(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyArrayObject *__pyx_v_x = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_ (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_x,0};
    PyObject* values[1] = {0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_x)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 988, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "_") < 0)) __PYX_ERR(0, 988, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
    }
    __pyx_v_x = ((PyArrayObject *)values[0]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("_", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 988, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm._", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_x), __pyx_ptype_5numpy_ndarray, 0, "x", 0))) __PYX_ERR(0, 989, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pysndlib_3clm_42_(__pyx_self, __pyx_v_x);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_42_(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_x) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("pysndlib.clm._", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __Pyx_GetModuleGlobalName(__pyx_t_37, __pyx_n_s_clm_channels); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 988, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  __pyx_t_41 = __Pyx_PyObject_GetAttrStr(__pyx_t_37, __pyx_n_s_register); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 988, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
  __pyx_t_37 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 988, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  if (PyDict_SetItem(__pyx_t_37, __pyx_n_s_x, __pyx_kp_s_np_ndarray) < 0) __PYX_ERR(0, 988, __pyx_L1_error)
  __pyx_t_40 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_43_, 0, __pyx_n_s__124, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__146)); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 988, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_40, __pyx_t_37);
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
  __pyx_t_37 = __Pyx_PyObject_CallOneArg(__pyx_t_41, __pyx_t_40); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 988, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s__124, __pyx_t_37) < 0) __PYX_ERR(0, 988, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
/* … */
  __pyx_codeobj__146 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__127, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s__124, 988, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__146)) __PYX_ERR(0, 988, __pyx_L1_error)
 0989: def _(x: np.ndarray):
+0990:     if x.ndim == 1:
  __pyx_t_1 = __pyx_f_5numpy_7ndarray_4ndim_ndim(__pyx_v_x); if (unlikely(__pyx_t_1 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 990, __pyx_L1_error)
  __pyx_t_2 = (__pyx_t_1 == 1);
  if (__pyx_t_2) {
/* … */
  }
+0991:         return 1
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_int_1);
    __pyx_r = __pyx_int_1;
    goto __pyx_L0;
+0992:     elif x.ndim == 2:
  __pyx_t_1 = __pyx_f_5numpy_7ndarray_4ndim_ndim(__pyx_v_x); if (unlikely(__pyx_t_1 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 992, __pyx_L1_error)
  __pyx_t_2 = (__pyx_t_1 == 2);
  if (likely(__pyx_t_2)) {
/* … */
  }
+0993:         return np.shape(x)[0]
    __Pyx_XDECREF(__pyx_r);
    __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 993, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_shape); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 993, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_4 = NULL;
    __pyx_t_1 = 0;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) {
      __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_5);
      if (likely(__pyx_t_4)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
        __Pyx_INCREF(__pyx_t_4);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_5, function);
        __pyx_t_1 = 1;
      }
    }
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_4, ((PyObject *)__pyx_v_x)};
      __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_5, __pyx_callargs+1-__pyx_t_1, 1+__pyx_t_1);
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 993, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    }
    __pyx_t_5 = __Pyx_GetItemInt(__pyx_t_3, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 993, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_r = __pyx_t_5;
    __pyx_t_5 = 0;
    goto __pyx_L0;
 0994:     else:
+0995:         raise RuntimeError(f'ndarray must have 1 or 2 dimensions not {x.ndim}. ')
  /*else*/ {
    __pyx_t_5 = PyTuple_New(3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 995, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_6 = 0;
    __pyx_t_7 = 127;
    __Pyx_INCREF(__pyx_kp_u_ndarray_must_have_1_or_2_dimensi);
    __pyx_t_6 += 40;
    __Pyx_GIVEREF(__pyx_kp_u_ndarray_must_have_1_or_2_dimensi);
    PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_kp_u_ndarray_must_have_1_or_2_dimensi);
    __pyx_t_1 = __pyx_f_5numpy_7ndarray_4ndim_ndim(__pyx_v_x); if (unlikely(__pyx_t_1 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 995, __pyx_L1_error)
    __pyx_t_3 = __Pyx_PyUnicode_From_int(__pyx_t_1, 0, ' ', 'd'); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 995, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_6 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_3);
    __Pyx_GIVEREF(__pyx_t_3);
    PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_3);
    __pyx_t_3 = 0;
    __Pyx_INCREF(__pyx_kp_u__13);
    __pyx_t_6 += 2;
    __Pyx_GIVEREF(__pyx_kp_u__13);
    PyTuple_SET_ITEM(__pyx_t_5, 2, __pyx_kp_u__13);
    __pyx_t_3 = __Pyx_PyUnicode_Join(__pyx_t_5, 3, __pyx_t_6, __pyx_t_7); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 995, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_5 = __Pyx_PyObject_CallOneArg(__pyx_builtin_RuntimeError, __pyx_t_3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 995, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_Raise(__pyx_t_5, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __PYX_ERR(0, 995, __pyx_L1_error)
  }
 0996: 
 0997: # --------------- clm_srate ---------------- #
+0998: @singledispatch
/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_45clm_srate(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_8pysndlib_3clm_45clm_srate = {"clm_srate", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_45clm_srate, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_8pysndlib_3clm_45clm_srate(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  CYTHON_UNUSED PyObject *__pyx_v_x = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("clm_srate (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_x,0};
    PyObject* values[1] = {0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_x)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 998, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "clm_srate") < 0)) __PYX_ERR(0, 998, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
    }
    __pyx_v_x = values[0];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("clm_srate", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 998, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.clm_srate", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pysndlib_3clm_44clm_srate(__pyx_self, __pyx_v_x);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_44clm_srate(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_x) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("clm_srate", 0);

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __Pyx_GetModuleGlobalName(__pyx_t_37, __pyx_n_s_singledispatch); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 998, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  __pyx_t_40 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_45clm_srate, 0, __pyx_n_s_clm_srate, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__147)); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 998, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  __pyx_t_41 = __Pyx_PyObject_CallOneArg(__pyx_t_37, __pyx_t_40); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 998, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_clm_srate, __pyx_t_41) < 0) __PYX_ERR(0, 998, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
/* … */
  __pyx_codeobj__147 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__127, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_clm_srate, 998, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__147)) __PYX_ERR(0, 998, __pyx_L1_error)
 0999: def clm_srate(x):
 1000:     pass
 1001: 
+1002: @clm_srate.register
/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_47_(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_8pysndlib_3clm_47_ = {"_", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_47_, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_8pysndlib_3clm_47_(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_x = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_ (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_x,0};
    PyObject* values[1] = {0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_x)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1002, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "_") < 0)) __PYX_ERR(0, 1002, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
    }
    __pyx_v_x = ((PyObject*)values[0]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("_", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 1002, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm._", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_x), (&PyString_Type), 0, "x", 1))) __PYX_ERR(0, 1003, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pysndlib_3clm_46_(__pyx_self, __pyx_v_x);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_46_(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_x) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pysndlib.clm._", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __Pyx_GetModuleGlobalName(__pyx_t_41, __pyx_n_s_clm_srate); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 1002, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  __pyx_t_40 = __Pyx_PyObject_GetAttrStr(__pyx_t_41, __pyx_n_s_register); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 1002, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
  __pyx_t_41 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 1002, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  if (PyDict_SetItem(__pyx_t_41, __pyx_n_s_x, __pyx_n_s_str_2) < 0) __PYX_ERR(0, 1002, __pyx_L1_error)
  __pyx_t_37 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_47_, 0, __pyx_n_s__124, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__148)); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 1002, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_37, __pyx_t_41);
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
  __pyx_t_41 = __Pyx_PyObject_CallOneArg(__pyx_t_40, __pyx_t_37); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 1002, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s__124, __pyx_t_41) < 0) __PYX_ERR(0, 1002, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
/* … */
  __pyx_codeobj__148 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__127, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s__124, 1002, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__148)) __PYX_ERR(0, 1002, __pyx_L1_error)
 1003: def _(x: str): #file
+1004:     return csndlib.mus_sound_srate(x)
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyObject_AsString(__pyx_v_x); if (unlikely((!__pyx_t_1) && PyErr_Occurred())) __PYX_ERR(0, 1004, __pyx_L1_error)
  __pyx_t_2 = __Pyx_PyInt_From_int(mus_sound_srate(__pyx_t_1)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1004, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;
 1005: 
 1006: # --------------- clm_framples ---------------- #
+1007: @singledispatch
/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_49clm_framples(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_8pysndlib_3clm_49clm_framples = {"clm_framples", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_49clm_framples, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_8pysndlib_3clm_49clm_framples(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  CYTHON_UNUSED PyObject *__pyx_v_x = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("clm_framples (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_x,0};
    PyObject* values[1] = {0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_x)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1007, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "clm_framples") < 0)) __PYX_ERR(0, 1007, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
    }
    __pyx_v_x = values[0];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("clm_framples", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 1007, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.clm_framples", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pysndlib_3clm_48clm_framples(__pyx_self, __pyx_v_x);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_48clm_framples(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_x) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("clm_framples", 0);

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __Pyx_GetModuleGlobalName(__pyx_t_41, __pyx_n_s_singledispatch); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 1007, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  __pyx_t_37 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_49clm_framples, 0, __pyx_n_s_clm_framples, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__149)); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 1007, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  __pyx_t_40 = __Pyx_PyObject_CallOneArg(__pyx_t_41, __pyx_t_37); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 1007, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_clm_framples, __pyx_t_40) < 0) __PYX_ERR(0, 1007, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
/* … */
  __pyx_codeobj__149 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__127, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_clm_framples, 1007, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__149)) __PYX_ERR(0, 1007, __pyx_L1_error)
 1008: def clm_framples(x):
 1009:     pass
 1010: 
+1011: @clm_framples.register
/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_51_(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_8pysndlib_3clm_51_ = {"_", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_51_, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_8pysndlib_3clm_51_(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_x = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_ (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_x,0};
    PyObject* values[1] = {0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_x)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1011, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "_") < 0)) __PYX_ERR(0, 1011, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
    }
    __pyx_v_x = ((PyObject*)values[0]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("_", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 1011, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm._", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_x), (&PyString_Type), 0, "x", 1))) __PYX_ERR(0, 1012, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pysndlib_3clm_50_(__pyx_self, __pyx_v_x);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_50_(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_x) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pysndlib.clm._", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __Pyx_GetModuleGlobalName(__pyx_t_40, __pyx_n_s_clm_framples); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 1011, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  __pyx_t_37 = __Pyx_PyObject_GetAttrStr(__pyx_t_40, __pyx_n_s_register); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 1011, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
  __pyx_t_40 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 1011, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  if (PyDict_SetItem(__pyx_t_40, __pyx_n_s_x, __pyx_n_s_str_2) < 0) __PYX_ERR(0, 1011, __pyx_L1_error)
  __pyx_t_41 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_51_, 0, __pyx_n_s__124, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__150)); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 1011, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_41, __pyx_t_40);
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
  __pyx_t_40 = __Pyx_PyObject_CallOneArg(__pyx_t_37, __pyx_t_41); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 1011, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s__124, __pyx_t_40) < 0) __PYX_ERR(0, 1011, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
/* … */
  __pyx_codeobj__150 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__127, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s__124, 1011, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__150)) __PYX_ERR(0, 1011, __pyx_L1_error)
 1012: def _(x: str):# assume file
+1013:     return csndlib.mus_sound_framples(x)
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyObject_AsString(__pyx_v_x); if (unlikely((!__pyx_t_1) && PyErr_Occurred())) __PYX_ERR(0, 1013, __pyx_L1_error)
  __pyx_t_2 = __Pyx_PyInt_From_mus_long_t(mus_sound_framples(__pyx_t_1)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1013, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;
 1014: 
+1015: @clm_framples.register
/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_53_(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_8pysndlib_3clm_53_ = {"_", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_53_, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_8pysndlib_3clm_53_(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_x = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_ (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_x,0};
    PyObject* values[1] = {0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_x)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1015, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "_") < 0)) __PYX_ERR(0, 1015, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
    }
    __pyx_v_x = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)values[0]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("_", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 1015, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm._", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_x), __pyx_ptype_8pysndlib_3clm_mus_any, 0, "x", 0))) __PYX_ERR(0, 1016, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pysndlib_3clm_52_(__pyx_self, __pyx_v_x);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_52_(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_x) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pysndlib.clm._", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __Pyx_GetModuleGlobalName(__pyx_t_40, __pyx_n_s_clm_framples); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 1015, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  __pyx_t_41 = __Pyx_PyObject_GetAttrStr(__pyx_t_40, __pyx_n_s_register); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 1015, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
  __pyx_t_40 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 1015, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  if (PyDict_SetItem(__pyx_t_40, __pyx_n_s_x, __pyx_n_s_mus_any) < 0) __PYX_ERR(0, 1015, __pyx_L1_error)
  __pyx_t_37 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_53_, 0, __pyx_n_s__124, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__151)); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 1015, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_37, __pyx_t_40);
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
  __pyx_t_40 = __Pyx_PyObject_CallOneArg(__pyx_t_41, __pyx_t_37); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 1015, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s__124, __pyx_t_40) < 0) __PYX_ERR(0, 1015, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
/* … */
  __pyx_codeobj__151 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__127, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s__124, 1015, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__151)) __PYX_ERR(0, 1015, __pyx_L1_error)
 1016: def _(x: mus_any):# 
+1017:     return x.mus_length
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_x), __pyx_n_s_mus_length); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1017, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 1018: 
+1019: @clm_framples.register
/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_55_(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_8pysndlib_3clm_55_ = {"_", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_55_, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_8pysndlib_3clm_55_(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_x = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_ (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_x,0};
    PyObject* values[1] = {0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_x)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1019, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "_") < 0)) __PYX_ERR(0, 1019, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
    }
    __pyx_v_x = ((PyObject*)values[0]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("_", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 1019, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm._", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_x), (&PyList_Type), 0, "x", 1))) __PYX_ERR(0, 1020, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pysndlib_3clm_54_(__pyx_self, __pyx_v_x);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_54_(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_x) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pysndlib.clm._", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __Pyx_GetModuleGlobalName(__pyx_t_40, __pyx_n_s_clm_framples); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 1019, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  __pyx_t_37 = __Pyx_PyObject_GetAttrStr(__pyx_t_40, __pyx_n_s_register); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 1019, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
  __pyx_t_40 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 1019, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  if (PyDict_SetItem(__pyx_t_40, __pyx_n_s_x, __pyx_n_s_list) < 0) __PYX_ERR(0, 1019, __pyx_L1_error)
  __pyx_t_41 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_55_, 0, __pyx_n_s__124, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__152)); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 1019, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_41, __pyx_t_40);
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
  __pyx_t_40 = __Pyx_PyObject_CallOneArg(__pyx_t_37, __pyx_t_41); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 1019, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s__124, __pyx_t_40) < 0) __PYX_ERR(0, 1019, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
/* … */
  __pyx_codeobj__152 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__127, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s__124, 1019, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__152)) __PYX_ERR(0, 1019, __pyx_L1_error)
 1020: def _(x: list):
+1021:     return len(x[0])
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_GetItemInt_List(__pyx_v_x, 0, long, 1, __Pyx_PyInt_From_long, 1, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1021, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = PyObject_Length(__pyx_t_1); if (unlikely(__pyx_t_2 == ((Py_ssize_t)-1))) __PYX_ERR(0, 1021, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = PyInt_FromSsize_t(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1021, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 1022: 
+1023: @clm_framples.register
/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_57_(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_8pysndlib_3clm_57_ = {"_", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_57_, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_8pysndlib_3clm_57_(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyArrayObject *__pyx_v_x = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_ (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_x,0};
    PyObject* values[1] = {0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_x)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1023, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "_") < 0)) __PYX_ERR(0, 1023, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
    }
    __pyx_v_x = ((PyArrayObject *)values[0]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("_", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 1023, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm._", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_x), __pyx_ptype_5numpy_ndarray, 0, "x", 0))) __PYX_ERR(0, 1024, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pysndlib_3clm_56_(__pyx_self, __pyx_v_x);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_56_(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_x) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("pysndlib.clm._", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __Pyx_GetModuleGlobalName(__pyx_t_40, __pyx_n_s_clm_framples); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 1023, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  __pyx_t_41 = __Pyx_PyObject_GetAttrStr(__pyx_t_40, __pyx_n_s_register); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 1023, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
  __pyx_t_40 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 1023, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  if (PyDict_SetItem(__pyx_t_40, __pyx_n_s_x, __pyx_kp_s_np_ndarray) < 0) __PYX_ERR(0, 1023, __pyx_L1_error)
  __pyx_t_37 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_57_, 0, __pyx_n_s__124, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__153)); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 1023, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_37, __pyx_t_40);
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
  __pyx_t_40 = __Pyx_PyObject_CallOneArg(__pyx_t_41, __pyx_t_37); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 1023, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s__124, __pyx_t_40) < 0) __PYX_ERR(0, 1023, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
/* … */
  __pyx_codeobj__153 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__127, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s__124, 1023, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__153)) __PYX_ERR(0, 1023, __pyx_L1_error)
 1024: def _(x: np.ndarray):
+1025:     if x.ndim == 1:
  __pyx_t_1 = __pyx_f_5numpy_7ndarray_4ndim_ndim(__pyx_v_x); if (unlikely(__pyx_t_1 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1025, __pyx_L1_error)
  __pyx_t_2 = (__pyx_t_1 == 1);
  if (__pyx_t_2) {
/* … */
  }
+1026:         return np.shape(x)[0]
    __Pyx_XDECREF(__pyx_r);
    __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1026, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_shape); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1026, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_4 = NULL;
    __pyx_t_1 = 0;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) {
      __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_5);
      if (likely(__pyx_t_4)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
        __Pyx_INCREF(__pyx_t_4);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_5, function);
        __pyx_t_1 = 1;
      }
    }
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_4, ((PyObject *)__pyx_v_x)};
      __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_5, __pyx_callargs+1-__pyx_t_1, 1+__pyx_t_1);
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1026, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    }
    __pyx_t_5 = __Pyx_GetItemInt(__pyx_t_3, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1026, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_r = __pyx_t_5;
    __pyx_t_5 = 0;
    goto __pyx_L0;
+1027:     elif x.ndim == 2:
  __pyx_t_1 = __pyx_f_5numpy_7ndarray_4ndim_ndim(__pyx_v_x); if (unlikely(__pyx_t_1 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1027, __pyx_L1_error)
  __pyx_t_2 = (__pyx_t_1 == 2);
  if (likely(__pyx_t_2)) {
/* … */
  }
+1028:         return np.shape(x)[1]
    __Pyx_XDECREF(__pyx_r);
    __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1028, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_shape); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1028, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_3 = NULL;
    __pyx_t_1 = 0;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) {
      __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4);
      if (likely(__pyx_t_3)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
        __Pyx_INCREF(__pyx_t_3);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_4, function);
        __pyx_t_1 = 1;
      }
    }
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_3, ((PyObject *)__pyx_v_x)};
      __pyx_t_5 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_1, 1+__pyx_t_1);
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1028, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    }
    __pyx_t_4 = __Pyx_GetItemInt(__pyx_t_5, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1028, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_r = __pyx_t_4;
    __pyx_t_4 = 0;
    goto __pyx_L0;
 1029:     else:
+1030:         raise RuntimeError(f'ndarray must have 1 or 2 dimensions not {x.ndim}. ')
  /*else*/ {
    __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1030, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_6 = 0;
    __pyx_t_7 = 127;
    __Pyx_INCREF(__pyx_kp_u_ndarray_must_have_1_or_2_dimensi);
    __pyx_t_6 += 40;
    __Pyx_GIVEREF(__pyx_kp_u_ndarray_must_have_1_or_2_dimensi);
    PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_kp_u_ndarray_must_have_1_or_2_dimensi);
    __pyx_t_1 = __pyx_f_5numpy_7ndarray_4ndim_ndim(__pyx_v_x); if (unlikely(__pyx_t_1 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1030, __pyx_L1_error)
    __pyx_t_5 = __Pyx_PyUnicode_From_int(__pyx_t_1, 0, ' ', 'd'); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1030, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_6 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_5);
    __Pyx_GIVEREF(__pyx_t_5);
    PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_5);
    __pyx_t_5 = 0;
    __Pyx_INCREF(__pyx_kp_u__13);
    __pyx_t_6 += 2;
    __Pyx_GIVEREF(__pyx_kp_u__13);
    PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_kp_u__13);
    __pyx_t_5 = __Pyx_PyUnicode_Join(__pyx_t_4, 3, __pyx_t_6, __pyx_t_7); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1030, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_4 = __Pyx_PyObject_CallOneArg(__pyx_builtin_RuntimeError, __pyx_t_5); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1030, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_Raise(__pyx_t_4, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __PYX_ERR(0, 1030, __pyx_L1_error)
  }
 1031: 
 1032: # --------------- clm random ---------------- # 
+1033: @singledispatch
/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_59_random(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_8pysndlib_3clm_59_random = {"_random", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_59_random, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_8pysndlib_3clm_59_random(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  CYTHON_UNUSED PyObject *__pyx_v_x = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_random (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_x,0};
    PyObject* values[1] = {0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_x)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1033, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "_random") < 0)) __PYX_ERR(0, 1033, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
    }
    __pyx_v_x = values[0];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("_random", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 1033, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm._random", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pysndlib_3clm_58_random(__pyx_self, __pyx_v_x);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_58_random(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_x) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_random", 0);

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __Pyx_GetModuleGlobalName(__pyx_t_40, __pyx_n_s_singledispatch); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 1033, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  __pyx_t_37 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_59_random, 0, __pyx_n_s_random_2, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__154)); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 1033, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  __pyx_t_41 = __Pyx_PyObject_CallOneArg(__pyx_t_40, __pyx_t_37); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 1033, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_random_2, __pyx_t_41) < 0) __PYX_ERR(0, 1033, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
/* … */
  __pyx_codeobj__154 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__127, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_random_2, 1033, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__154)) __PYX_ERR(0, 1033, __pyx_L1_error)
 1034: def _random(x):
 1035:     pass
 1036: 
+1037: @_random.register
/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_61_(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_8pysndlib_3clm_61_ = {"_", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_61_, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_8pysndlib_3clm_61_(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  CYTHON_UNUSED double __pyx_v_x;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_ (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_x,0};
    PyObject* values[1] = {0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_x)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1037, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "_") < 0)) __PYX_ERR(0, 1037, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
    }
    __pyx_v_x = __pyx_PyFloat_AsDouble(values[0]); if (unlikely((__pyx_v_x == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 1038, __pyx_L3_error)
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("_", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 1037, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm._", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pysndlib_3clm_60_(__pyx_self, __pyx_v_x);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_60_(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED double __pyx_v_x) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("pysndlib.clm._", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __Pyx_GetModuleGlobalName(__pyx_t_41, __pyx_n_s_random_2); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 1037, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  __pyx_t_37 = __Pyx_PyObject_GetAttrStr(__pyx_t_41, __pyx_n_s_register); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 1037, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
  __pyx_t_41 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 1037, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  if (PyDict_SetItem(__pyx_t_41, __pyx_n_s_x, __pyx_n_s_float) < 0) __PYX_ERR(0, 1037, __pyx_L1_error)
  __pyx_t_40 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_61_, 0, __pyx_n_s__124, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__155)); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 1037, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_40, __pyx_t_41);
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
  __pyx_t_41 = __Pyx_PyObject_CallOneArg(__pyx_t_37, __pyx_t_40); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 1037, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s__124, __pyx_t_41) < 0) __PYX_ERR(0, 1037, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
/* … */
  __pyx_codeobj__155 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__127, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s__124, 1037, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__155)) __PYX_ERR(0, 1037, __pyx_L1_error)
 1038: def _(x: float):
+1039:     return random.random()
  __Pyx_XDECREF(__pyx_r);
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_random); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1039, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_random); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1039, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = NULL;
  __pyx_t_4 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
    if (likely(__pyx_t_2)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_2);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_3, function);
      __pyx_t_4 = 1;
    }
  }
  {
    PyObject *__pyx_callargs[1] = {__pyx_t_2, };
    __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_4, 0+__pyx_t_4);
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1039, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  }
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 1040: 
+1041: @_random.register
/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_63_(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_8pysndlib_3clm_63_ = {"_", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_63_, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_8pysndlib_3clm_63_(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_x = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_ (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_x,0};
    PyObject* values[1] = {0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_x)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1041, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "_") < 0)) __PYX_ERR(0, 1041, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
    }
    __pyx_v_x = ((PyObject*)values[0]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("_", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 1041, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm._", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_x), (&PyInt_Type), 0, "x", 1))) __PYX_ERR(0, 1042, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pysndlib_3clm_62_(__pyx_self, __pyx_v_x);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_62_(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_x) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("pysndlib.clm._", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __Pyx_GetModuleGlobalName(__pyx_t_41, __pyx_n_s_random_2); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 1041, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  __pyx_t_40 = __Pyx_PyObject_GetAttrStr(__pyx_t_41, __pyx_n_s_register); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 1041, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
  __pyx_t_41 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 1041, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  if (PyDict_SetItem(__pyx_t_41, __pyx_n_s_x, __pyx_n_s_int_2) < 0) __PYX_ERR(0, 1041, __pyx_L1_error)
  __pyx_t_37 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_63_, 0, __pyx_n_s__124, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__156)); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 1041, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_37, __pyx_t_41);
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
  __pyx_t_41 = __Pyx_PyObject_CallOneArg(__pyx_t_40, __pyx_t_37); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 1041, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s__124, __pyx_t_41) < 0) __PYX_ERR(0, 1041, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
/* … */
  __pyx_codeobj__156 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__127, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s__124, 1041, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__156)) __PYX_ERR(0, 1041, __pyx_L1_error)
 1042: def _(x: int):
+1043:     return random.randrange(x)
  __Pyx_XDECREF(__pyx_r);
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_random); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1043, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_randrange); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1043, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = NULL;
  __pyx_t_4 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
    if (likely(__pyx_t_2)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_2);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_3, function);
      __pyx_t_4 = 1;
    }
  }
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_v_x};
    __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4);
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1043, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  }
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 1044: 
+1045: @singledispatch
/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_65_random2(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_8pysndlib_3clm_65_random2 = {"_random2", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_65_random2, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_8pysndlib_3clm_65_random2(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  CYTHON_UNUSED PyObject *__pyx_v_x = 0;
  CYTHON_UNUSED PyObject *__pyx_v_y = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_random2 (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_x,&__pyx_n_s_y,0};
    PyObject* values[2] = {0,0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_x)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1045, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_y)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1045, __pyx_L3_error)
        else {
          __Pyx_RaiseArgtupleInvalid("_random2", 1, 2, 2, 1); __PYX_ERR(0, 1045, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "_random2") < 0)) __PYX_ERR(0, 1045, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 2)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
      values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
    }
    __pyx_v_x = values[0];
    __pyx_v_y = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("_random2", 1, 2, 2, __pyx_nargs); __PYX_ERR(0, 1045, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm._random2", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pysndlib_3clm_64_random2(__pyx_self, __pyx_v_x, __pyx_v_y);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_64_random2(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_x, CYTHON_UNUSED PyObject *__pyx_v_y) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_random2", 0);

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __Pyx_GetModuleGlobalName(__pyx_t_41, __pyx_n_s_singledispatch); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 1045, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
/* … */
  __pyx_tuple__157 = PyTuple_Pack(2, __pyx_n_s_x, __pyx_n_s_y); if (unlikely(!__pyx_tuple__157)) __PYX_ERR(0, 1045, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__157);
  __Pyx_GIVEREF(__pyx_tuple__157);
  __pyx_t_37 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_65_random2, 0, __pyx_n_s_random2, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__158)); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 1045, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  __pyx_t_40 = __Pyx_PyObject_CallOneArg(__pyx_t_41, __pyx_t_37); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 1045, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_random2, __pyx_t_40) < 0) __PYX_ERR(0, 1045, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
  __pyx_codeobj__158 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__157, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_random2, 1045, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__158)) __PYX_ERR(0, 1045, __pyx_L1_error)
 1046: def _random2(x, y):
 1047:     pass
 1048: 
+1049: @_random2.register
/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_67_(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_8pysndlib_3clm_67_ = {"_", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_67_, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_8pysndlib_3clm_67_(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  double __pyx_v_x;
  double __pyx_v_y;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_ (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_x,&__pyx_n_s_y,0};
    PyObject* values[2] = {0,0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_x)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1049, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_y)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1049, __pyx_L3_error)
        else {
          __Pyx_RaiseArgtupleInvalid("_", 1, 2, 2, 1); __PYX_ERR(0, 1049, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "_") < 0)) __PYX_ERR(0, 1049, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 2)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
      values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
    }
    __pyx_v_x = __pyx_PyFloat_AsDouble(values[0]); if (unlikely((__pyx_v_x == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 1050, __pyx_L3_error)
    __pyx_v_y = __pyx_PyFloat_AsDouble(values[1]); if (unlikely((__pyx_v_y == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 1050, __pyx_L3_error)
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("_", 1, 2, 2, __pyx_nargs); __PYX_ERR(0, 1049, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm._", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pysndlib_3clm_66_(__pyx_self, __pyx_v_x, __pyx_v_y);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_66_(CYTHON_UNUSED PyObject *__pyx_self, double __pyx_v_x, double __pyx_v_y) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("pysndlib.clm._", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __Pyx_GetModuleGlobalName(__pyx_t_40, __pyx_n_s_random2); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 1049, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  __pyx_t_37 = __Pyx_PyObject_GetAttrStr(__pyx_t_40, __pyx_n_s_register); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 1049, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
  __pyx_t_40 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 1049, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  if (PyDict_SetItem(__pyx_t_40, __pyx_n_s_x, __pyx_n_s_float) < 0) __PYX_ERR(0, 1049, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_40, __pyx_n_s_y, __pyx_n_s_float) < 0) __PYX_ERR(0, 1049, __pyx_L1_error)
  __pyx_t_41 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_67_, 0, __pyx_n_s__124, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__159)); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 1049, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_41, __pyx_t_40);
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
  __pyx_t_40 = __Pyx_PyObject_CallOneArg(__pyx_t_37, __pyx_t_41); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 1049, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s__124, __pyx_t_40) < 0) __PYX_ERR(0, 1049, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
/* … */
  __pyx_codeobj__159 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__157, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s__124, 1049, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__159)) __PYX_ERR(0, 1049, __pyx_L1_error)
 1050: def _(x:float , y: float):
+1051:     return random.uniform(x,y)
  __Pyx_XDECREF(__pyx_r);
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_random); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1051, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_uniform); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1051, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = PyFloat_FromDouble(__pyx_v_x); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1051, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_4 = PyFloat_FromDouble(__pyx_v_y); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1051, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = NULL;
  __pyx_t_6 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_3);
    if (likely(__pyx_t_5)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_5);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_3, function);
      __pyx_t_6 = 1;
    }
  }
  {
    PyObject *__pyx_callargs[3] = {__pyx_t_5, __pyx_t_2, __pyx_t_4};
    __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_6, 2+__pyx_t_6);
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1051, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  }
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 1052: 
+1053: @_random2.register
/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_69_(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_8pysndlib_3clm_69_ = {"_", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_69_, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_8pysndlib_3clm_69_(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_x = 0;
  PyObject *__pyx_v_y = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_ (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_x,&__pyx_n_s_y,0};
    PyObject* values[2] = {0,0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_x)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1053, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_y)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1053, __pyx_L3_error)
        else {
          __Pyx_RaiseArgtupleInvalid("_", 1, 2, 2, 1); __PYX_ERR(0, 1053, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "_") < 0)) __PYX_ERR(0, 1053, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 2)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
      values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
    }
    __pyx_v_x = ((PyObject*)values[0]);
    __pyx_v_y = ((PyObject*)values[1]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("_", 1, 2, 2, __pyx_nargs); __PYX_ERR(0, 1053, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm._", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_x), (&PyInt_Type), 0, "x", 1))) __PYX_ERR(0, 1054, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_y), (&PyInt_Type), 0, "y", 1))) __PYX_ERR(0, 1054, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pysndlib_3clm_68_(__pyx_self, __pyx_v_x, __pyx_v_y);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_68_(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_x, PyObject *__pyx_v_y) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("pysndlib.clm._", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __Pyx_GetModuleGlobalName(__pyx_t_40, __pyx_n_s_random2); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 1053, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  __pyx_t_41 = __Pyx_PyObject_GetAttrStr(__pyx_t_40, __pyx_n_s_register); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 1053, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
  __pyx_t_40 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 1053, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  if (PyDict_SetItem(__pyx_t_40, __pyx_n_s_x, __pyx_n_s_int_2) < 0) __PYX_ERR(0, 1053, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_40, __pyx_n_s_y, __pyx_n_s_int_2) < 0) __PYX_ERR(0, 1053, __pyx_L1_error)
  __pyx_t_37 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_69_, 0, __pyx_n_s__124, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__160)); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 1053, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_37, __pyx_t_40);
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
  __pyx_t_40 = __Pyx_PyObject_CallOneArg(__pyx_t_41, __pyx_t_37); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 1053, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s__124, __pyx_t_40) < 0) __PYX_ERR(0, 1053, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
/* … */
  __pyx_codeobj__160 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__157, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s__124, 1053, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__160)) __PYX_ERR(0, 1053, __pyx_L1_error)
 1054: def _(x:int , y: int):
+1055:     return random.randrange(x, y)
  __Pyx_XDECREF(__pyx_r);
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_random); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1055, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_randrange); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1055, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = NULL;
  __pyx_t_4 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
    if (likely(__pyx_t_2)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_2);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_3, function);
      __pyx_t_4 = 1;
    }
  }
  {
    PyObject *__pyx_callargs[3] = {__pyx_t_2, __pyx_v_x, __pyx_v_y};
    __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_4, 2+__pyx_t_4);
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1055, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  }
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 1056: 
+1057: def clm_random(*args):
/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_71clm_random(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyMethodDef __pyx_mdef_8pysndlib_3clm_71clm_random = {"clm_random", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_8pysndlib_3clm_71clm_random, METH_VARARGS|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_8pysndlib_3clm_71clm_random(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_args = 0;
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("clm_random (wrapper)", 0);
  if (unlikely(__pyx_kwds) && __Pyx_NumKwargs_VARARGS(__pyx_kwds) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "clm_random", 0))) return NULL;
  __Pyx_INCREF(__pyx_args);
  __pyx_v_args = __pyx_args;
  __pyx_r = __pyx_pf_8pysndlib_3clm_70clm_random(__pyx_self, __pyx_v_args);

  /* function exit code */
  __Pyx_DECREF(__pyx_v_args);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_70clm_random(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_args) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("clm_random", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_AddTraceback("pysndlib.clm.clm_random", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__161 = PyTuple_Pack(1, __pyx_n_s_args); if (unlikely(!__pyx_tuple__161)) __PYX_ERR(0, 1057, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__161);
  __Pyx_GIVEREF(__pyx_tuple__161);
/* … */
  __pyx_t_40 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_71clm_random, 0, __pyx_n_s_clm_random, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__162)); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 1057, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_clm_random, __pyx_t_40) < 0) __PYX_ERR(0, 1057, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
  __pyx_codeobj__162 = (PyObject*)__Pyx_PyCode_New(0, 0, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS|CO_VARARGS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__161, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_clm_random, 1057, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__162)) __PYX_ERR(0, 1057, __pyx_L1_error)
+1058:     if len(args) == 0:
  __pyx_t_1 = PyTuple_GET_SIZE(__pyx_v_args); if (unlikely(__pyx_t_1 == ((Py_ssize_t)-1))) __PYX_ERR(0, 1058, __pyx_L1_error)
  __pyx_t_2 = (__pyx_t_1 == 0);
  if (__pyx_t_2) {
/* … */
  }
+1059:         return random.random()
    __Pyx_XDECREF(__pyx_r);
    __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_random); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1059, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_random); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1059, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_4 = NULL;
    __pyx_t_6 = 0;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) {
      __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_5);
      if (likely(__pyx_t_4)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
        __Pyx_INCREF(__pyx_t_4);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_5, function);
        __pyx_t_6 = 1;
      }
    }
    {
      PyObject *__pyx_callargs[1] = {__pyx_t_4, };
      __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_5, __pyx_callargs+1-__pyx_t_6, 0+__pyx_t_6);
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1059, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    }
    __pyx_r = __pyx_t_3;
    __pyx_t_3 = 0;
    goto __pyx_L0;
+1060:     elif len(args) == 1:
  __pyx_t_1 = PyTuple_GET_SIZE(__pyx_v_args); if (unlikely(__pyx_t_1 == ((Py_ssize_t)-1))) __PYX_ERR(0, 1060, __pyx_L1_error)
  __pyx_t_2 = (__pyx_t_1 == 1);
  if (__pyx_t_2) {
/* … */
  }
+1061:         return _random(args[0])
    __Pyx_XDECREF(__pyx_r);
    __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_random_2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1061, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_4 = __Pyx_GetItemInt_Tuple(__pyx_v_args, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1061, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_7 = NULL;
    __pyx_t_6 = 0;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) {
      __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_5);
      if (likely(__pyx_t_7)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
        __Pyx_INCREF(__pyx_t_7);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_5, function);
        __pyx_t_6 = 1;
      }
    }
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_t_4};
      __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_5, __pyx_callargs+1-__pyx_t_6, 1+__pyx_t_6);
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1061, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    }
    __pyx_r = __pyx_t_3;
    __pyx_t_3 = 0;
    goto __pyx_L0;
 1062:     else:
+1063:         return _random2(args[0], args[1])
  /*else*/ {
    __Pyx_XDECREF(__pyx_r);
    __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_random2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1063, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_4 = __Pyx_GetItemInt_Tuple(__pyx_v_args, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1063, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_7 = __Pyx_GetItemInt_Tuple(__pyx_v_args, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1063, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __pyx_t_8 = NULL;
    __pyx_t_6 = 0;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) {
      __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_5);
      if (likely(__pyx_t_8)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
        __Pyx_INCREF(__pyx_t_8);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_5, function);
        __pyx_t_6 = 1;
      }
    }
    {
      PyObject *__pyx_callargs[3] = {__pyx_t_8, __pyx_t_4, __pyx_t_7};
      __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_5, __pyx_callargs+1-__pyx_t_6, 2+__pyx_t_6);
      __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1063, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    }
    __pyx_r = __pyx_t_3;
    __pyx_t_3 = 0;
    goto __pyx_L0;
  }
 1064: 
 1065: 
 1066: # --------------- just some extra utils ---------------- #    
 1067: 
 1068: 
 1069: 
 1070: 
 1071: # # --------------- clm utility functions ---------------- #
 1072: # 
+1073: cpdef cython.double radians2hz(radians: cython.double):
static PyObject *__pyx_pw_8pysndlib_3clm_73radians2hz(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static double __pyx_f_8pysndlib_3clm_radians2hz(double __pyx_v_radians, CYTHON_UNUSED int __pyx_skip_dispatch) {
  double __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("radians2hz", 0);
/* … */
  /* function exit code */
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_73radians2hz(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_72radians2hz, "\n    convert radians per sample to frequency:  `hz = rads * srate / (2 * pi)`.\n    \n    :param radians: frequency \\in radians\n    :return: frequency \\in hertz\n    :rtype: float\n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_73radians2hz = {"radians2hz", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_73radians2hz, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_72radians2hz};
static PyObject *__pyx_pw_8pysndlib_3clm_73radians2hz(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  double __pyx_v_radians;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("radians2hz (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_radians,0};
    PyObject* values[1] = {0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_radians)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1073, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "radians2hz") < 0)) __PYX_ERR(0, 1073, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
    }
    __pyx_v_radians = __pyx_PyFloat_AsDouble(values[0]); if (unlikely((__pyx_v_radians == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 1073, __pyx_L3_error)
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("radians2hz", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 1073, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.radians2hz", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pysndlib_3clm_72radians2hz(__pyx_self, __pyx_v_radians);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_72radians2hz(CYTHON_UNUSED PyObject *__pyx_self, double __pyx_v_radians) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("radians2hz", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_8pysndlib_3clm_radians2hz(__pyx_v_radians, 0); if (unlikely(__pyx_t_1 == ((double)-1) && PyErr_Occurred())) __PYX_ERR(0, 1073, __pyx_L1_error)
  __pyx_t_2 = PyFloat_FromDouble(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1073, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pysndlib.clm.radians2hz", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__163 = PyTuple_Pack(1, __pyx_n_s_radians); if (unlikely(!__pyx_tuple__163)) __PYX_ERR(0, 1073, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__163);
  __Pyx_GIVEREF(__pyx_tuple__163);
/* … */
  __pyx_t_40 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 1073, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  if (PyDict_SetItem(__pyx_t_40, __pyx_n_s_radians, __pyx_kp_s_cython_double) < 0) __PYX_ERR(0, 1073, __pyx_L1_error)
  __pyx_t_37 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_73radians2hz, 0, __pyx_n_s_radians2hz, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__164)); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 1073, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_37, __pyx_t_40);
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_radians2hz, __pyx_t_37) < 0) __PYX_ERR(0, 1073, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
  __pyx_codeobj__164 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__163, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_radians2hz, 1073, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__164)) __PYX_ERR(0, 1073, __pyx_L1_error)
 1074:     """
 1075:     convert radians per sample to frequency:  `hz = rads * srate / (2 * pi)`.
 1076:     
 1077:     :param radians: frequency \in radians
 1078:     :return: frequency \in hertz
 1079:     :rtype: float
 1080:     """
 1081: 
+1082:     return cclm.mus_radians_to_hz(radians)
  __pyx_r = mus_radians_to_hz(__pyx_v_radians);
  goto __pyx_L0;
 1083: 
+1084: cpdef cython.double hz2radians(hz: cython.double):
static PyObject *__pyx_pw_8pysndlib_3clm_75hz2radians(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static double __pyx_f_8pysndlib_3clm_hz2radians(double __pyx_v_hz, CYTHON_UNUSED int __pyx_skip_dispatch) {
  double __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("hz2radians", 0);
/* … */
  /* function exit code */
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_75hz2radians(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_74hz2radians, "\n    convert frequency in hz to radians per sample:  `hz * 2 * pi / srate`.\n    \n    :param hz: frequency \\in hertz\n    :return: frequency \\in radians\n    :rtype: float\n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_75hz2radians = {"hz2radians", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_75hz2radians, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_74hz2radians};
static PyObject *__pyx_pw_8pysndlib_3clm_75hz2radians(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  double __pyx_v_hz;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("hz2radians (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_hz,0};
    PyObject* values[1] = {0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_hz)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1084, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "hz2radians") < 0)) __PYX_ERR(0, 1084, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
    }
    __pyx_v_hz = __pyx_PyFloat_AsDouble(values[0]); if (unlikely((__pyx_v_hz == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 1084, __pyx_L3_error)
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("hz2radians", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 1084, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.hz2radians", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pysndlib_3clm_74hz2radians(__pyx_self, __pyx_v_hz);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_74hz2radians(CYTHON_UNUSED PyObject *__pyx_self, double __pyx_v_hz) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("hz2radians", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_8pysndlib_3clm_hz2radians(__pyx_v_hz, 0); if (unlikely(__pyx_t_1 == ((double)-1) && PyErr_Occurred())) __PYX_ERR(0, 1084, __pyx_L1_error)
  __pyx_t_2 = PyFloat_FromDouble(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1084, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pysndlib.clm.hz2radians", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__165 = PyTuple_Pack(1, __pyx_n_s_hz); if (unlikely(!__pyx_tuple__165)) __PYX_ERR(0, 1084, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__165);
  __Pyx_GIVEREF(__pyx_tuple__165);
/* … */
  __pyx_t_37 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 1084, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  if (PyDict_SetItem(__pyx_t_37, __pyx_n_s_hz, __pyx_kp_s_cython_double) < 0) __PYX_ERR(0, 1084, __pyx_L1_error)
  __pyx_t_40 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_75hz2radians, 0, __pyx_n_s_hz2radians, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__166)); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 1084, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_40, __pyx_t_37);
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_hz2radians, __pyx_t_40) < 0) __PYX_ERR(0, 1084, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
  __pyx_codeobj__166 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__165, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_hz2radians, 1084, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__166)) __PYX_ERR(0, 1084, __pyx_L1_error)
 1085:     """
 1086:     convert frequency in hz to radians per sample:  `hz * 2 * pi / srate`.
 1087:     
 1088:     :param hz: frequency \in hertz
 1089:     :return: frequency \in radians
 1090:     :rtype: float
 1091:     """
+1092:     return cclm.mus_hz_to_radians(hz)
  __pyx_r = mus_hz_to_radians(__pyx_v_hz);
  goto __pyx_L0;
 1093: 
+1094: cpdef cython.double degrees2radians(degrees: cython.double):
static PyObject *__pyx_pw_8pysndlib_3clm_77degrees2radians(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static double __pyx_f_8pysndlib_3clm_degrees2radians(double __pyx_v_degrees, CYTHON_UNUSED int __pyx_skip_dispatch) {
  double __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("degrees2radians", 0);
/* … */
  /* function exit code */
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_77degrees2radians(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_76degrees2radians, "\n    convert degrees to radians:  `degrees * 2 * pi / 360`.\n    \n    :param degrees: angle in degrees\n    :return: angle in radians\n    :rtype: float\n    \n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_77degrees2radians = {"degrees2radians", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_77degrees2radians, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_76degrees2radians};
static PyObject *__pyx_pw_8pysndlib_3clm_77degrees2radians(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  double __pyx_v_degrees;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("degrees2radians (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_degrees,0};
    PyObject* values[1] = {0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_degrees)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1094, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "degrees2radians") < 0)) __PYX_ERR(0, 1094, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
    }
    __pyx_v_degrees = __pyx_PyFloat_AsDouble(values[0]); if (unlikely((__pyx_v_degrees == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 1094, __pyx_L3_error)
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("degrees2radians", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 1094, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.degrees2radians", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pysndlib_3clm_76degrees2radians(__pyx_self, __pyx_v_degrees);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_76degrees2radians(CYTHON_UNUSED PyObject *__pyx_self, double __pyx_v_degrees) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("degrees2radians", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_8pysndlib_3clm_degrees2radians(__pyx_v_degrees, 0); if (unlikely(__pyx_t_1 == ((double)-1) && PyErr_Occurred())) __PYX_ERR(0, 1094, __pyx_L1_error)
  __pyx_t_2 = PyFloat_FromDouble(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1094, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pysndlib.clm.degrees2radians", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__167 = PyTuple_Pack(1, __pyx_n_s_degrees); if (unlikely(!__pyx_tuple__167)) __PYX_ERR(0, 1094, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__167);
  __Pyx_GIVEREF(__pyx_tuple__167);
/* … */
  __pyx_t_40 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 1094, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  if (PyDict_SetItem(__pyx_t_40, __pyx_n_s_degrees, __pyx_kp_s_cython_double) < 0) __PYX_ERR(0, 1094, __pyx_L1_error)
  __pyx_t_37 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_77degrees2radians, 0, __pyx_n_s_degrees2radians, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__168)); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 1094, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_37, __pyx_t_40);
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_degrees2radians, __pyx_t_37) < 0) __PYX_ERR(0, 1094, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
  __pyx_codeobj__168 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__167, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_degrees2radians, 1094, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__168)) __PYX_ERR(0, 1094, __pyx_L1_error)
 1095:     """
 1096:     convert degrees to radians:  `degrees * 2 * pi / 360`.
 1097:     
 1098:     :param degrees: angle in degrees
 1099:     :return: angle in radians
 1100:     :rtype: float
 1101:     
 1102:     """
+1103:     return cclm.mus_degrees_to_radians(degrees)
  __pyx_r = mus_degrees_to_radians(__pyx_v_degrees);
  goto __pyx_L0;
 1104: 
+1105: cpdef cython.double radians2degrees(radians: cython.double):
static PyObject *__pyx_pw_8pysndlib_3clm_79radians2degrees(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static double __pyx_f_8pysndlib_3clm_radians2degrees(double __pyx_v_radians, CYTHON_UNUSED int __pyx_skip_dispatch) {
  double __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("radians2degrees", 0);
/* … */
  /* function exit code */
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_79radians2degrees(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_78radians2degrees, "\n    convert radians to degrees: `rads * 360 / (2 * pi)`.\n    \n    :param radians: angle in radians\n    :return: degree\n    :rtype: float\n    \n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_79radians2degrees = {"radians2degrees", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_79radians2degrees, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_78radians2degrees};
static PyObject *__pyx_pw_8pysndlib_3clm_79radians2degrees(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  double __pyx_v_radians;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("radians2degrees (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_radians,0};
    PyObject* values[1] = {0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_radians)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1105, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "radians2degrees") < 0)) __PYX_ERR(0, 1105, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
    }
    __pyx_v_radians = __pyx_PyFloat_AsDouble(values[0]); if (unlikely((__pyx_v_radians == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 1105, __pyx_L3_error)
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("radians2degrees", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 1105, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.radians2degrees", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pysndlib_3clm_78radians2degrees(__pyx_self, __pyx_v_radians);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_78radians2degrees(CYTHON_UNUSED PyObject *__pyx_self, double __pyx_v_radians) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("radians2degrees", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_8pysndlib_3clm_radians2degrees(__pyx_v_radians, 0); if (unlikely(__pyx_t_1 == ((double)-1) && PyErr_Occurred())) __PYX_ERR(0, 1105, __pyx_L1_error)
  __pyx_t_2 = PyFloat_FromDouble(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1105, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pysndlib.clm.radians2degrees", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_37 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 1105, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  if (PyDict_SetItem(__pyx_t_37, __pyx_n_s_radians, __pyx_kp_s_cython_double) < 0) __PYX_ERR(0, 1105, __pyx_L1_error)
  __pyx_t_40 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_79radians2degrees, 0, __pyx_n_s_radians2degrees, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__169)); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 1105, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_40, __pyx_t_37);
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_radians2degrees, __pyx_t_40) < 0) __PYX_ERR(0, 1105, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
/* … */
  __pyx_codeobj__169 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__163, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_radians2degrees, 1105, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__169)) __PYX_ERR(0, 1105, __pyx_L1_error)
 1106:     """
 1107:     convert radians to degrees: `rads * 360 / (2 * pi)`.
 1108:     
 1109:     :param radians: angle in radians
 1110:     :return: degree
 1111:     :rtype: float
 1112:     
 1113:     """
 1114: 
+1115:     return cclm.mus_radians_to_degrees(radians)
  __pyx_r = mus_radians_to_degrees(__pyx_v_radians);
  goto __pyx_L0;
 1116: 
+1117: cpdef cython.double db2linear(x: cython.double):
static PyObject *__pyx_pw_8pysndlib_3clm_81db2linear(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static double __pyx_f_8pysndlib_3clm_db2linear(double __pyx_v_x, CYTHON_UNUSED int __pyx_skip_dispatch) {
  double __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("db2linear", 0);
/* … */
  /* function exit code */
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_81db2linear(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_80db2linear, "\n    convert decibel value db to linear value: `pow(10, db / 20)`.\n\n    :param x: decibel\n    :return: linear amplitude\n    :rtype: float\n    \n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_81db2linear = {"db2linear", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_81db2linear, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_80db2linear};
static PyObject *__pyx_pw_8pysndlib_3clm_81db2linear(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  double __pyx_v_x;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("db2linear (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_x,0};
    PyObject* values[1] = {0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_x)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1117, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "db2linear") < 0)) __PYX_ERR(0, 1117, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
    }
    __pyx_v_x = __pyx_PyFloat_AsDouble(values[0]); if (unlikely((__pyx_v_x == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 1117, __pyx_L3_error)
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("db2linear", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 1117, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.db2linear", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pysndlib_3clm_80db2linear(__pyx_self, __pyx_v_x);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_80db2linear(CYTHON_UNUSED PyObject *__pyx_self, double __pyx_v_x) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("db2linear", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_8pysndlib_3clm_db2linear(__pyx_v_x, 0); if (unlikely(__pyx_t_1 == ((double)-1) && PyErr_Occurred())) __PYX_ERR(0, 1117, __pyx_L1_error)
  __pyx_t_2 = PyFloat_FromDouble(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1117, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pysndlib.clm.db2linear", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_40 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 1117, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  if (PyDict_SetItem(__pyx_t_40, __pyx_n_s_x, __pyx_kp_s_cython_double) < 0) __PYX_ERR(0, 1117, __pyx_L1_error)
  __pyx_t_37 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_81db2linear, 0, __pyx_n_s_db2linear, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__170)); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 1117, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_37, __pyx_t_40);
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_db2linear, __pyx_t_37) < 0) __PYX_ERR(0, 1117, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
/* … */
  __pyx_codeobj__170 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__127, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_db2linear, 1117, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__170)) __PYX_ERR(0, 1117, __pyx_L1_error)
 1118:     """
 1119:     convert decibel value db to linear value: `pow(10, db / 20)`.
 1120: 
 1121:     :param x: decibel
 1122:     :return: linear amplitude
 1123:     :rtype: float
 1124:     
 1125:     """
 1126: 
+1127:     return cclm.mus_db_to_linear(x)
  __pyx_r = mus_db_to_linear(__pyx_v_x);
  goto __pyx_L0;
 1128: 
+1129: cpdef cython.double linear2db(x: cython.double):
static PyObject *__pyx_pw_8pysndlib_3clm_83linear2db(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static double __pyx_f_8pysndlib_3clm_linear2db(double __pyx_v_x, CYTHON_UNUSED int __pyx_skip_dispatch) {
  double __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("linear2db", 0);
/* … */
  /* function exit code */
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_83linear2db(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_82linear2db, "\n    convert linear value to decibels 20 * log10(lin).\n\n    :param x: linear amplitude\n    :return: decibel\n    :rtype: float\n    \n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_83linear2db = {"linear2db", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_83linear2db, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_82linear2db};
static PyObject *__pyx_pw_8pysndlib_3clm_83linear2db(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  double __pyx_v_x;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("linear2db (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_x,0};
    PyObject* values[1] = {0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_x)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1129, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "linear2db") < 0)) __PYX_ERR(0, 1129, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
    }
    __pyx_v_x = __pyx_PyFloat_AsDouble(values[0]); if (unlikely((__pyx_v_x == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 1129, __pyx_L3_error)
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("linear2db", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 1129, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.linear2db", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pysndlib_3clm_82linear2db(__pyx_self, __pyx_v_x);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_82linear2db(CYTHON_UNUSED PyObject *__pyx_self, double __pyx_v_x) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("linear2db", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_8pysndlib_3clm_linear2db(__pyx_v_x, 0); if (unlikely(__pyx_t_1 == ((double)-1) && PyErr_Occurred())) __PYX_ERR(0, 1129, __pyx_L1_error)
  __pyx_t_2 = PyFloat_FromDouble(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1129, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pysndlib.clm.linear2db", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_37 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 1129, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  if (PyDict_SetItem(__pyx_t_37, __pyx_n_s_x, __pyx_kp_s_cython_double) < 0) __PYX_ERR(0, 1129, __pyx_L1_error)
  __pyx_t_40 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_83linear2db, 0, __pyx_n_s_linear2db, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__171)); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 1129, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_40, __pyx_t_37);
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_linear2db, __pyx_t_40) < 0) __PYX_ERR(0, 1129, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
/* … */
  __pyx_codeobj__171 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__127, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_linear2db, 1129, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__171)) __PYX_ERR(0, 1129, __pyx_L1_error)
 1130:     """
 1131:     convert linear value to decibels 20 * log10(lin).
 1132: 
 1133:     :param x: linear amplitude
 1134:     :return: decibel
 1135:     :rtype: float
 1136:     
 1137:     """
 1138: 
+1139:     return cclm.mus_linear_to_db(x)
  __pyx_r = mus_linear_to_db(__pyx_v_x);
  goto __pyx_L0;
 1140: 
+1141: cpdef cython.double odd_multiple(x: cython.double , y: cython.double ):
static PyObject *__pyx_pw_8pysndlib_3clm_85odd_multiple(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static double __pyx_f_8pysndlib_3clm_odd_multiple(double __pyx_v_x, double __pyx_v_y, CYTHON_UNUSED int __pyx_skip_dispatch) {
  double __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("odd_multiple", 0);
/* … */
  /* function exit code */
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_85odd_multiple(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_84odd_multiple, "\n    return y times the nearest odd integer to x.\n    \n    :param x:\n    :param y:\n    :return: nearest odd integer as a float\n    :rtype: float\n    \n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_85odd_multiple = {"odd_multiple", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_85odd_multiple, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_84odd_multiple};
static PyObject *__pyx_pw_8pysndlib_3clm_85odd_multiple(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  double __pyx_v_x;
  double __pyx_v_y;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("odd_multiple (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_x,&__pyx_n_s_y,0};
    PyObject* values[2] = {0,0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_x)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1141, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_y)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1141, __pyx_L3_error)
        else {
          __Pyx_RaiseArgtupleInvalid("odd_multiple", 1, 2, 2, 1); __PYX_ERR(0, 1141, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "odd_multiple") < 0)) __PYX_ERR(0, 1141, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 2)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
      values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
    }
    __pyx_v_x = __pyx_PyFloat_AsDouble(values[0]); if (unlikely((__pyx_v_x == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 1141, __pyx_L3_error)
    __pyx_v_y = __pyx_PyFloat_AsDouble(values[1]); if (unlikely((__pyx_v_y == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 1141, __pyx_L3_error)
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("odd_multiple", 1, 2, 2, __pyx_nargs); __PYX_ERR(0, 1141, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.odd_multiple", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pysndlib_3clm_84odd_multiple(__pyx_self, __pyx_v_x, __pyx_v_y);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_84odd_multiple(CYTHON_UNUSED PyObject *__pyx_self, double __pyx_v_x, double __pyx_v_y) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("odd_multiple", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_8pysndlib_3clm_odd_multiple(__pyx_v_x, __pyx_v_y, 0); if (unlikely(__pyx_t_1 == ((double)-1) && PyErr_Occurred())) __PYX_ERR(0, 1141, __pyx_L1_error)
  __pyx_t_2 = PyFloat_FromDouble(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1141, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pysndlib.clm.odd_multiple", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_40 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 1141, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  if (PyDict_SetItem(__pyx_t_40, __pyx_n_s_x, __pyx_kp_s_cython_double) < 0) __PYX_ERR(0, 1141, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_40, __pyx_n_s_y, __pyx_kp_s_cython_double) < 0) __PYX_ERR(0, 1141, __pyx_L1_error)
  __pyx_t_37 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_85odd_multiple, 0, __pyx_n_s_odd_multiple, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__172)); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 1141, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_37, __pyx_t_40);
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_odd_multiple, __pyx_t_37) < 0) __PYX_ERR(0, 1141, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
/* … */
  __pyx_codeobj__172 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__157, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_odd_multiple, 1141, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__172)) __PYX_ERR(0, 1141, __pyx_L1_error)
 1142:     """
 1143:     return y times the nearest odd integer to x.
 1144:     
 1145:     :param x:
 1146:     :param y:
 1147:     :return: nearest odd integer as a float
 1148:     :rtype: float
 1149:     
 1150:     """
 1151: 
+1152:     return cclm.mus_odd_multiple(x,y)
  __pyx_r = mus_odd_multiple(__pyx_v_x, __pyx_v_y);
  goto __pyx_L0;
 1153: 
+1154: cpdef cython.double even_multiple(x: cython.double , y: cython.double ):
static PyObject *__pyx_pw_8pysndlib_3clm_87even_multiple(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static double __pyx_f_8pysndlib_3clm_even_multiple(double __pyx_v_x, double __pyx_v_y, CYTHON_UNUSED int __pyx_skip_dispatch) {
  double __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("even_multiple", 0);
/* … */
  /* function exit code */
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_87even_multiple(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_86even_multiple, "\n    return y times the nearest even integer to x.\n    \n    :param x:\n    :param y:\n    :return: nearest even integer as a float\n    :rtype: float\n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_87even_multiple = {"even_multiple", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_87even_multiple, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_86even_multiple};
static PyObject *__pyx_pw_8pysndlib_3clm_87even_multiple(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  double __pyx_v_x;
  double __pyx_v_y;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("even_multiple (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_x,&__pyx_n_s_y,0};
    PyObject* values[2] = {0,0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_x)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1154, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_y)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1154, __pyx_L3_error)
        else {
          __Pyx_RaiseArgtupleInvalid("even_multiple", 1, 2, 2, 1); __PYX_ERR(0, 1154, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "even_multiple") < 0)) __PYX_ERR(0, 1154, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 2)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
      values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
    }
    __pyx_v_x = __pyx_PyFloat_AsDouble(values[0]); if (unlikely((__pyx_v_x == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 1154, __pyx_L3_error)
    __pyx_v_y = __pyx_PyFloat_AsDouble(values[1]); if (unlikely((__pyx_v_y == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 1154, __pyx_L3_error)
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("even_multiple", 1, 2, 2, __pyx_nargs); __PYX_ERR(0, 1154, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.even_multiple", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pysndlib_3clm_86even_multiple(__pyx_self, __pyx_v_x, __pyx_v_y);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_86even_multiple(CYTHON_UNUSED PyObject *__pyx_self, double __pyx_v_x, double __pyx_v_y) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("even_multiple", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_8pysndlib_3clm_even_multiple(__pyx_v_x, __pyx_v_y, 0); if (unlikely(__pyx_t_1 == ((double)-1) && PyErr_Occurred())) __PYX_ERR(0, 1154, __pyx_L1_error)
  __pyx_t_2 = PyFloat_FromDouble(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1154, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pysndlib.clm.even_multiple", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_37 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 1154, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  if (PyDict_SetItem(__pyx_t_37, __pyx_n_s_x, __pyx_kp_s_cython_double) < 0) __PYX_ERR(0, 1154, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_37, __pyx_n_s_y, __pyx_kp_s_cython_double) < 0) __PYX_ERR(0, 1154, __pyx_L1_error)
  __pyx_t_40 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_87even_multiple, 0, __pyx_n_s_even_multiple, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__173)); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 1154, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_40, __pyx_t_37);
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_even_multiple, __pyx_t_40) < 0) __PYX_ERR(0, 1154, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
/* … */
  __pyx_codeobj__173 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__157, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_even_multiple, 1154, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__173)) __PYX_ERR(0, 1154, __pyx_L1_error)
 1155:     """
 1156:     return y times the nearest even integer to x.
 1157:     
 1158:     :param x:
 1159:     :param y:
 1160:     :return: nearest even integer as a float
 1161:     :rtype: float
 1162:     """
 1163: 
+1164:     return cclm.mus_even_multiple(x,y)
  __pyx_r = mus_even_multiple(__pyx_v_x, __pyx_v_y);
  goto __pyx_L0;
 1165: 
+1166: cpdef cython.double odd_weight(x: cython.double):
static PyObject *__pyx_pw_8pysndlib_3clm_89odd_weight(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static double __pyx_f_8pysndlib_3clm_odd_weight(double __pyx_v_x, CYTHON_UNUSED int __pyx_skip_dispatch) {
  double __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("odd_weight", 0);
/* … */
  /* function exit code */
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_89odd_weight(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_88odd_weight, "\n    return a number between 0.0 (x is even) and 1.0 (x is odd).\n    \n    :param x:\n    :return weight:\n    :rtype: float\n    \n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_89odd_weight = {"odd_weight", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_89odd_weight, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_88odd_weight};
static PyObject *__pyx_pw_8pysndlib_3clm_89odd_weight(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  double __pyx_v_x;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("odd_weight (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_x,0};
    PyObject* values[1] = {0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_x)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1166, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "odd_weight") < 0)) __PYX_ERR(0, 1166, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
    }
    __pyx_v_x = __pyx_PyFloat_AsDouble(values[0]); if (unlikely((__pyx_v_x == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 1166, __pyx_L3_error)
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("odd_weight", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 1166, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.odd_weight", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pysndlib_3clm_88odd_weight(__pyx_self, __pyx_v_x);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_88odd_weight(CYTHON_UNUSED PyObject *__pyx_self, double __pyx_v_x) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("odd_weight", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_8pysndlib_3clm_odd_weight(__pyx_v_x, 0); if (unlikely(__pyx_t_1 == ((double)-1) && PyErr_Occurred())) __PYX_ERR(0, 1166, __pyx_L1_error)
  __pyx_t_2 = PyFloat_FromDouble(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1166, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pysndlib.clm.odd_weight", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_40 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 1166, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  if (PyDict_SetItem(__pyx_t_40, __pyx_n_s_x, __pyx_kp_s_cython_double) < 0) __PYX_ERR(0, 1166, __pyx_L1_error)
  __pyx_t_37 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_89odd_weight, 0, __pyx_n_s_odd_weight, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__174)); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 1166, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_37, __pyx_t_40);
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_odd_weight, __pyx_t_37) < 0) __PYX_ERR(0, 1166, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
/* … */
  __pyx_codeobj__174 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__127, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_odd_weight, 1166, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__174)) __PYX_ERR(0, 1166, __pyx_L1_error)
 1167:     """
 1168:     return a number between 0.0 (x is even) and 1.0 (x is odd).
 1169:     
 1170:     :param x:
 1171:     :return weight:
 1172:     :rtype: float
 1173:     
 1174:     """
 1175: 
+1176:     return cclm.mus_odd_weight(x)
  __pyx_r = mus_odd_weight(__pyx_v_x);
  goto __pyx_L0;
 1177: 
+1178: cpdef cython.double even_weight(x: cython.double ):
static PyObject *__pyx_pw_8pysndlib_3clm_91even_weight(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static double __pyx_f_8pysndlib_3clm_even_weight(double __pyx_v_x, CYTHON_UNUSED int __pyx_skip_dispatch) {
  double __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("even_weight", 0);
/* … */
  /* function exit code */
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_91even_weight(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_90even_weight, "\n    return a number between 0.0 (x is odd) and 1.0 (x is even).\n    \n    :param x:\n    :return weight:\n    :rtype: float\n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_91even_weight = {"even_weight", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_91even_weight, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_90even_weight};
static PyObject *__pyx_pw_8pysndlib_3clm_91even_weight(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  double __pyx_v_x;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("even_weight (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_x,0};
    PyObject* values[1] = {0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_x)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1178, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "even_weight") < 0)) __PYX_ERR(0, 1178, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
    }
    __pyx_v_x = __pyx_PyFloat_AsDouble(values[0]); if (unlikely((__pyx_v_x == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 1178, __pyx_L3_error)
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("even_weight", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 1178, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.even_weight", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pysndlib_3clm_90even_weight(__pyx_self, __pyx_v_x);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_90even_weight(CYTHON_UNUSED PyObject *__pyx_self, double __pyx_v_x) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("even_weight", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_8pysndlib_3clm_even_weight(__pyx_v_x, 0); if (unlikely(__pyx_t_1 == ((double)-1) && PyErr_Occurred())) __PYX_ERR(0, 1178, __pyx_L1_error)
  __pyx_t_2 = PyFloat_FromDouble(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1178, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pysndlib.clm.even_weight", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_37 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 1178, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  if (PyDict_SetItem(__pyx_t_37, __pyx_n_s_x, __pyx_kp_s_cython_double) < 0) __PYX_ERR(0, 1178, __pyx_L1_error)
  __pyx_t_40 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_91even_weight, 0, __pyx_n_s_even_weight, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__175)); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 1178, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_40, __pyx_t_37);
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_even_weight, __pyx_t_40) < 0) __PYX_ERR(0, 1178, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
/* … */
  __pyx_codeobj__175 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__127, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_even_weight, 1178, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__175)) __PYX_ERR(0, 1178, __pyx_L1_error)
 1179:     """
 1180:     return a number between 0.0 (x is odd) and 1.0 (x is even).
 1181:     
 1182:     :param x:
 1183:     :return weight:
 1184:     :rtype: float
 1185:     """
 1186: 
+1187:     return cclm.mus_even_weight(x)
  __pyx_r = mus_even_weight(__pyx_v_x);
  goto __pyx_L0;
 1188: 
+1189: cpdef cython.double get_srate():
static PyObject *__pyx_pw_8pysndlib_3clm_93get_srate(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static double __pyx_f_8pysndlib_3clm_get_srate(CYTHON_UNUSED int __pyx_skip_dispatch) {
  double __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("get_srate", 0);
/* … */
  /* function exit code */
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_93get_srate(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_92get_srate, "\n    return current sample rate.\n    \n    :return samplerate:\n    :rtype: float\n    \n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_93get_srate = {"get_srate", (PyCFunction)__pyx_pw_8pysndlib_3clm_93get_srate, METH_NOARGS, __pyx_doc_8pysndlib_3clm_92get_srate};
static PyObject *__pyx_pw_8pysndlib_3clm_93get_srate(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("get_srate (wrapper)", 0);
  __pyx_r = __pyx_pf_8pysndlib_3clm_92get_srate(__pyx_self);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_92get_srate(CYTHON_UNUSED PyObject *__pyx_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("get_srate", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_8pysndlib_3clm_get_srate(0); if (unlikely(__pyx_t_1 == ((double)-1) && PyErr_Occurred())) __PYX_ERR(0, 1189, __pyx_L1_error)
  __pyx_t_2 = PyFloat_FromDouble(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1189, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pysndlib.clm.get_srate", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_40 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_93get_srate, 0, __pyx_n_s_get_srate, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__176)); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 1189, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_get_srate, __pyx_t_40) < 0) __PYX_ERR(0, 1189, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
/* … */
  __pyx_codeobj__176 = (PyObject*)__Pyx_PyCode_New(0, 0, 0, 0, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_get_srate, 1189, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__176)) __PYX_ERR(0, 1189, __pyx_L1_error)
 1190:     """
 1191:     return current sample rate.
 1192:     
 1193:     :return samplerate:
 1194:     :rtype: float
 1195:     
 1196:     """
+1197:     return cclm.mus_srate()
  __pyx_r = mus_srate();
  goto __pyx_L0;
 1198: 
+1199: cpdef cython.double set_srate(r: cython.double ):
static PyObject *__pyx_pw_8pysndlib_3clm_95set_srate(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static double __pyx_f_8pysndlib_3clm_set_srate(double __pyx_v_r, CYTHON_UNUSED int __pyx_skip_dispatch) {
  double __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("set_srate", 0);
/* … */
  /* function exit code */
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_95set_srate(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_94set_srate, "\n    set current sample rate.\n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_95set_srate = {"set_srate", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_95set_srate, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_94set_srate};
static PyObject *__pyx_pw_8pysndlib_3clm_95set_srate(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  double __pyx_v_r;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("set_srate (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_r,0};
    PyObject* values[1] = {0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_r)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1199, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "set_srate") < 0)) __PYX_ERR(0, 1199, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
    }
    __pyx_v_r = __pyx_PyFloat_AsDouble(values[0]); if (unlikely((__pyx_v_r == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 1199, __pyx_L3_error)
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("set_srate", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 1199, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.set_srate", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pysndlib_3clm_94set_srate(__pyx_self, __pyx_v_r);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_94set_srate(CYTHON_UNUSED PyObject *__pyx_self, double __pyx_v_r) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("set_srate", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_8pysndlib_3clm_set_srate(__pyx_v_r, 0); if (unlikely(__pyx_t_1 == ((double)-1) && PyErr_Occurred())) __PYX_ERR(0, 1199, __pyx_L1_error)
  __pyx_t_2 = PyFloat_FromDouble(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1199, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pysndlib.clm.set_srate", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__177 = PyTuple_Pack(1, __pyx_n_s_r); if (unlikely(!__pyx_tuple__177)) __PYX_ERR(0, 1199, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__177);
  __Pyx_GIVEREF(__pyx_tuple__177);
/* … */
  __pyx_t_40 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 1199, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  if (PyDict_SetItem(__pyx_t_40, __pyx_n_s_r, __pyx_kp_s_cython_double) < 0) __PYX_ERR(0, 1199, __pyx_L1_error)
  __pyx_t_37 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_95set_srate, 0, __pyx_n_s_set_srate, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__178)); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 1199, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_37, __pyx_t_40);
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_set_srate, __pyx_t_37) < 0) __PYX_ERR(0, 1199, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
  __pyx_codeobj__178 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__177, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_set_srate, 1199, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__178)) __PYX_ERR(0, 1199, __pyx_L1_error)
 1200:     """
 1201:     set current sample rate.
 1202:     """
+1203:     return cclm.mus_set_srate(r)
  __pyx_r = mus_set_srate(__pyx_v_r);
  goto __pyx_L0;
 1204: 
+1205: cpdef cclm.mus_long_t seconds2samples(secs: cython.double ):
static PyObject *__pyx_pw_8pysndlib_3clm_97seconds2samples(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static mus_long_t __pyx_f_8pysndlib_3clm_seconds2samples(double __pyx_v_secs, CYTHON_UNUSED int __pyx_skip_dispatch) {
  mus_long_t __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("seconds2samples", 0);
/* … */
  /* function exit code */
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_97seconds2samples(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_96seconds2samples, "\n    use mus_srate to convert seconds to samples.\n    \n    :param secs: time in seconds\n    :return: time in samples\n    :rtype: int\n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_97seconds2samples = {"seconds2samples", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_97seconds2samples, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_96seconds2samples};
static PyObject *__pyx_pw_8pysndlib_3clm_97seconds2samples(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  double __pyx_v_secs;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("seconds2samples (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_secs,0};
    PyObject* values[1] = {0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_secs)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1205, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "seconds2samples") < 0)) __PYX_ERR(0, 1205, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
    }
    __pyx_v_secs = __pyx_PyFloat_AsDouble(values[0]); if (unlikely((__pyx_v_secs == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 1205, __pyx_L3_error)
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("seconds2samples", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 1205, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.seconds2samples", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pysndlib_3clm_96seconds2samples(__pyx_self, __pyx_v_secs);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_96seconds2samples(CYTHON_UNUSED PyObject *__pyx_self, double __pyx_v_secs) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("seconds2samples", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_8pysndlib_3clm_seconds2samples(__pyx_v_secs, 0); if (unlikely(__pyx_t_1 == ((mus_long_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 1205, __pyx_L1_error)
  __pyx_t_2 = __Pyx_PyInt_From_mus_long_t(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1205, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pysndlib.clm.seconds2samples", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__179 = PyTuple_Pack(1, __pyx_n_s_secs); if (unlikely(!__pyx_tuple__179)) __PYX_ERR(0, 1205, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__179);
  __Pyx_GIVEREF(__pyx_tuple__179);
/* … */
  __pyx_t_37 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 1205, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  if (PyDict_SetItem(__pyx_t_37, __pyx_n_s_secs, __pyx_kp_s_cython_double) < 0) __PYX_ERR(0, 1205, __pyx_L1_error)
  __pyx_t_40 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_97seconds2samples, 0, __pyx_n_s_seconds2samples, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__180)); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 1205, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_40, __pyx_t_37);
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_seconds2samples, __pyx_t_40) < 0) __PYX_ERR(0, 1205, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
  __pyx_codeobj__180 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__179, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_seconds2samples, 1205, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__180)) __PYX_ERR(0, 1205, __pyx_L1_error)
 1206:     """
 1207:     use mus_srate to convert seconds to samples.
 1208:     
 1209:     :param secs: time in seconds
 1210:     :return: time in samples
 1211:     :rtype: int
 1212:     """
+1213:     return cclm.mus_seconds_to_samples(secs)
  __pyx_r = mus_seconds_to_samples(__pyx_v_secs);
  goto __pyx_L0;
 1214: 
+1215: cpdef cython.double samples2seconds(samples: mus_long_t):
static PyObject *__pyx_pw_8pysndlib_3clm_99samples2seconds(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static double __pyx_f_8pysndlib_3clm_samples2seconds(PyObject *__pyx_v_samples, CYTHON_UNUSED int __pyx_skip_dispatch) {
  double __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("samples2seconds", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("pysndlib.clm.samples2seconds", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_99samples2seconds(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_98samples2seconds, "\n    use mus_srate to convert samples to seconds.\n    \n    :param samples: number of samples\n    :return: time in seconds\n    :rtype: float\n    \n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_99samples2seconds = {"samples2seconds", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_99samples2seconds, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_98samples2seconds};
static PyObject *__pyx_pw_8pysndlib_3clm_99samples2seconds(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_samples = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("samples2seconds (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_samples,0};
    PyObject* values[1] = {0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_samples)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1215, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "samples2seconds") < 0)) __PYX_ERR(0, 1215, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
    }
    __pyx_v_samples = values[0];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("samples2seconds", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 1215, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.samples2seconds", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pysndlib_3clm_98samples2seconds(__pyx_self, __pyx_v_samples);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_98samples2seconds(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_samples) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("samples2seconds", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_8pysndlib_3clm_samples2seconds(__pyx_v_samples, 0); if (unlikely(__pyx_t_1 == ((double)-1) && PyErr_Occurred())) __PYX_ERR(0, 1215, __pyx_L1_error)
  __pyx_t_2 = PyFloat_FromDouble(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1215, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pysndlib.clm.samples2seconds", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__181 = PyTuple_Pack(1, __pyx_n_s_samples); if (unlikely(!__pyx_tuple__181)) __PYX_ERR(0, 1215, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__181);
  __Pyx_GIVEREF(__pyx_tuple__181);
/* … */
  __pyx_t_40 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 1215, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  if (PyDict_SetItem(__pyx_t_40, __pyx_n_s_samples, __pyx_n_s_mus_long_t) < 0) __PYX_ERR(0, 1215, __pyx_L1_error)
  __pyx_t_37 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_99samples2seconds, 0, __pyx_n_s_samples2seconds, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__182)); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 1215, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_37, __pyx_t_40);
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_samples2seconds, __pyx_t_37) < 0) __PYX_ERR(0, 1215, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
  __pyx_codeobj__182 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__181, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_samples2seconds, 1215, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__182)) __PYX_ERR(0, 1215, __pyx_L1_error)
 1216:     """
 1217:     use mus_srate to convert samples to seconds.
 1218:     
 1219:     :param samples: number of samples
 1220:     :return: time in seconds
 1221:     :rtype: float
 1222:     
 1223:     """
+1224:     return cclm.mus_samples_to_seconds(samples)
  __pyx_t_1 = __Pyx_PyInt_As_mus_long_t(__pyx_v_samples); if (unlikely((__pyx_t_1 == ((mus_long_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 1224, __pyx_L1_error)
  __pyx_r = mus_samples_to_seconds(__pyx_t_1);
  goto __pyx_L0;
 1225: 
+1226: cpdef cython.double ring_modulate(s1: cython.double, s2: cython.double ):
static PyObject *__pyx_pw_8pysndlib_3clm_101ring_modulate(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static double __pyx_f_8pysndlib_3clm_ring_modulate(double __pyx_v_s1, double __pyx_v_s2, CYTHON_UNUSED int __pyx_skip_dispatch) {
  double __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("ring_modulate", 0);
/* … */
  /* function exit code */
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_101ring_modulate(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_100ring_modulate, "\n    return s1 * s2 (sample by sample multiply).\n    \n    :param s1: input 1\n    :param s2: input 2\n    :return: result\n    :rtype: float\n    \n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_101ring_modulate = {"ring_modulate", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_101ring_modulate, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_100ring_modulate};
static PyObject *__pyx_pw_8pysndlib_3clm_101ring_modulate(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  double __pyx_v_s1;
  double __pyx_v_s2;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("ring_modulate (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_s1,&__pyx_n_s_s2,0};
    PyObject* values[2] = {0,0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_s1)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1226, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_s2)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1226, __pyx_L3_error)
        else {
          __Pyx_RaiseArgtupleInvalid("ring_modulate", 1, 2, 2, 1); __PYX_ERR(0, 1226, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "ring_modulate") < 0)) __PYX_ERR(0, 1226, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 2)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
      values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
    }
    __pyx_v_s1 = __pyx_PyFloat_AsDouble(values[0]); if (unlikely((__pyx_v_s1 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 1226, __pyx_L3_error)
    __pyx_v_s2 = __pyx_PyFloat_AsDouble(values[1]); if (unlikely((__pyx_v_s2 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 1226, __pyx_L3_error)
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("ring_modulate", 1, 2, 2, __pyx_nargs); __PYX_ERR(0, 1226, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.ring_modulate", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pysndlib_3clm_100ring_modulate(__pyx_self, __pyx_v_s1, __pyx_v_s2);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_100ring_modulate(CYTHON_UNUSED PyObject *__pyx_self, double __pyx_v_s1, double __pyx_v_s2) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("ring_modulate", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_8pysndlib_3clm_ring_modulate(__pyx_v_s1, __pyx_v_s2, 0); if (unlikely(__pyx_t_1 == ((double)-1) && PyErr_Occurred())) __PYX_ERR(0, 1226, __pyx_L1_error)
  __pyx_t_2 = PyFloat_FromDouble(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1226, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pysndlib.clm.ring_modulate", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__183 = PyTuple_Pack(2, __pyx_n_s_s1, __pyx_n_s_s2); if (unlikely(!__pyx_tuple__183)) __PYX_ERR(0, 1226, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__183);
  __Pyx_GIVEREF(__pyx_tuple__183);
/* … */
  __pyx_t_37 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 1226, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  if (PyDict_SetItem(__pyx_t_37, __pyx_n_s_s1, __pyx_kp_s_cython_double) < 0) __PYX_ERR(0, 1226, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_37, __pyx_n_s_s2, __pyx_kp_s_cython_double) < 0) __PYX_ERR(0, 1226, __pyx_L1_error)
  __pyx_t_40 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_101ring_modulate, 0, __pyx_n_s_ring_modulate, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__184)); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 1226, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_40, __pyx_t_37);
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_ring_modulate, __pyx_t_40) < 0) __PYX_ERR(0, 1226, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
  __pyx_codeobj__184 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__183, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_ring_modulate, 1226, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__184)) __PYX_ERR(0, 1226, __pyx_L1_error)
 1227:     """
 1228:     return s1 * s2 (sample by sample multiply).
 1229:     
 1230:     :param s1: input 1
 1231:     :param s2: input 2
 1232:     :return: result
 1233:     :rtype: float
 1234:     
 1235:     """
 1236: 
+1237:     return cclm.mus_ring_modulate(s1, s2)
  __pyx_r = mus_ring_modulate(__pyx_v_s1, __pyx_v_s2);
  goto __pyx_L0;
 1238: 
+1239: cpdef cython.double amplitude_modulate(s1: cython.double, s2: cython.double , s3: cython.double):
static PyObject *__pyx_pw_8pysndlib_3clm_103amplitude_modulate(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static double __pyx_f_8pysndlib_3clm_amplitude_modulate(double __pyx_v_s1, double __pyx_v_s2, double __pyx_v_s3, CYTHON_UNUSED int __pyx_skip_dispatch) {
  double __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("amplitude_modulate", 0);
/* … */
  /* function exit code */
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_103amplitude_modulate(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_102amplitude_modulate, "\n    carrier in1 in2): in1 * (carrier + in2).\n        \n    :param s1: input 1\n    :param s2: input 2\n    :param s3: input 3\n    :return: result\n    :rtype: float\n    \n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_103amplitude_modulate = {"amplitude_modulate", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_103amplitude_modulate, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_102amplitude_modulate};
static PyObject *__pyx_pw_8pysndlib_3clm_103amplitude_modulate(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  double __pyx_v_s1;
  double __pyx_v_s2;
  double __pyx_v_s3;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("amplitude_modulate (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_s1,&__pyx_n_s_s2,&__pyx_n_s_s3,0};
    PyObject* values[3] = {0,0,0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_s1)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1239, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_s2)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1239, __pyx_L3_error)
        else {
          __Pyx_RaiseArgtupleInvalid("amplitude_modulate", 1, 3, 3, 1); __PYX_ERR(0, 1239, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_s3)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1239, __pyx_L3_error)
        else {
          __Pyx_RaiseArgtupleInvalid("amplitude_modulate", 1, 3, 3, 2); __PYX_ERR(0, 1239, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "amplitude_modulate") < 0)) __PYX_ERR(0, 1239, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 3)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
      values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
      values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
    }
    __pyx_v_s1 = __pyx_PyFloat_AsDouble(values[0]); if (unlikely((__pyx_v_s1 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 1239, __pyx_L3_error)
    __pyx_v_s2 = __pyx_PyFloat_AsDouble(values[1]); if (unlikely((__pyx_v_s2 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 1239, __pyx_L3_error)
    __pyx_v_s3 = __pyx_PyFloat_AsDouble(values[2]); if (unlikely((__pyx_v_s3 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 1239, __pyx_L3_error)
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("amplitude_modulate", 1, 3, 3, __pyx_nargs); __PYX_ERR(0, 1239, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.amplitude_modulate", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pysndlib_3clm_102amplitude_modulate(__pyx_self, __pyx_v_s1, __pyx_v_s2, __pyx_v_s3);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_102amplitude_modulate(CYTHON_UNUSED PyObject *__pyx_self, double __pyx_v_s1, double __pyx_v_s2, double __pyx_v_s3) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("amplitude_modulate", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_8pysndlib_3clm_amplitude_modulate(__pyx_v_s1, __pyx_v_s2, __pyx_v_s3, 0); if (unlikely(__pyx_t_1 == ((double)-1) && PyErr_Occurred())) __PYX_ERR(0, 1239, __pyx_L1_error)
  __pyx_t_2 = PyFloat_FromDouble(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1239, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pysndlib.clm.amplitude_modulate", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__185 = PyTuple_Pack(3, __pyx_n_s_s1, __pyx_n_s_s2, __pyx_n_s_s3); if (unlikely(!__pyx_tuple__185)) __PYX_ERR(0, 1239, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__185);
  __Pyx_GIVEREF(__pyx_tuple__185);
/* … */
  __pyx_t_40 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 1239, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  if (PyDict_SetItem(__pyx_t_40, __pyx_n_s_s1, __pyx_kp_s_cython_double) < 0) __PYX_ERR(0, 1239, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_40, __pyx_n_s_s2, __pyx_kp_s_cython_double) < 0) __PYX_ERR(0, 1239, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_40, __pyx_n_s_s3, __pyx_kp_s_cython_double) < 0) __PYX_ERR(0, 1239, __pyx_L1_error)
  __pyx_t_37 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_103amplitude_modulate, 0, __pyx_n_s_amplitude_modulate, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__186)); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 1239, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_37, __pyx_t_40);
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_amplitude_modulate, __pyx_t_37) < 0) __PYX_ERR(0, 1239, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
  __pyx_codeobj__186 = (PyObject*)__Pyx_PyCode_New(3, 0, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__185, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_amplitude_modulate, 1239, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__186)) __PYX_ERR(0, 1239, __pyx_L1_error)
 1240:     """
 1241:     carrier in1 in2): in1 * (carrier + in2).
 1242:         
 1243:     :param s1: input 1
 1244:     :param s2: input 2
 1245:     :param s3: input 3
 1246:     :return: result
 1247:     :rtype: float
 1248:     
 1249:     """
+1250:     return cclm.mus_amplitude_modulate(s1, s2, s3)
  __pyx_r = mus_amplitude_modulate(__pyx_v_s1, __pyx_v_s2, __pyx_v_s3);
  goto __pyx_L0;
 1251: 
+1252: cpdef cython.double contrast_enhancement(insig: cython.double, fm_index: cython.double =1.0 ):
static PyObject *__pyx_pw_8pysndlib_3clm_105contrast_enhancement(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static double __pyx_f_8pysndlib_3clm_contrast_enhancement(double __pyx_v_insig, CYTHON_UNUSED int __pyx_skip_dispatch, struct __pyx_opt_args_8pysndlib_3clm_contrast_enhancement *__pyx_optional_args) {
  double __pyx_v_fm_index = ((double)1.0);
  double __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("contrast_enhancement", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_fm_index = __pyx_optional_args->fm_index;
    }
  }
/* … */
  /* function exit code */
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_105contrast_enhancement(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_104contrast_enhancement, "\n    returns insig (index 1.0)): sin(sig * pi / 2 + fm_index * sin(sig * 2 * pi))\n    contrast_enhancement passes its input to sin as a kind of phase modulation.\n    \n    :param insig: input\n    :param fm_index: \n    :return: result\n    :rtype: float\n    \n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_105contrast_enhancement = {"contrast_enhancement", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_105contrast_enhancement, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_104contrast_enhancement};
static PyObject *__pyx_pw_8pysndlib_3clm_105contrast_enhancement(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  double __pyx_v_insig;
  double __pyx_v_fm_index;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("contrast_enhancement (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_insig,&__pyx_n_s_fm_index,0};
    PyObject* values[2] = {0,0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_insig)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1252, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_fm_index);
          if (value) { values[1] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1252, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "contrast_enhancement") < 0)) __PYX_ERR(0, 1252, __pyx_L3_error)
      }
    } else {
      switch (__pyx_nargs) {
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_insig = __pyx_PyFloat_AsDouble(values[0]); if (unlikely((__pyx_v_insig == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 1252, __pyx_L3_error)
    if (values[1]) {
      __pyx_v_fm_index = __pyx_PyFloat_AsDouble(values[1]); if (unlikely((__pyx_v_fm_index == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 1252, __pyx_L3_error)
    } else {
      __pyx_v_fm_index = ((double)1.0);
    }
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("contrast_enhancement", 0, 1, 2, __pyx_nargs); __PYX_ERR(0, 1252, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.contrast_enhancement", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pysndlib_3clm_104contrast_enhancement(__pyx_self, __pyx_v_insig, __pyx_v_fm_index);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_104contrast_enhancement(CYTHON_UNUSED PyObject *__pyx_self, double __pyx_v_insig, double __pyx_v_fm_index) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("contrast_enhancement", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2.__pyx_n = 1;
  __pyx_t_2.fm_index = __pyx_v_fm_index;
  __pyx_t_1 = __pyx_f_8pysndlib_3clm_contrast_enhancement(__pyx_v_insig, 0, &__pyx_t_2); if (unlikely(__pyx_t_1 == ((double)-1) && PyErr_Occurred())) __PYX_ERR(0, 1252, __pyx_L1_error)
  __pyx_t_3 = PyFloat_FromDouble(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1252, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_r = __pyx_t_3;
  __pyx_t_3 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("pysndlib.clm.contrast_enhancement", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__187 = PyTuple_Pack(2, __pyx_n_s_insig, __pyx_n_s_fm_index); if (unlikely(!__pyx_tuple__187)) __PYX_ERR(0, 1252, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__187);
  __Pyx_GIVEREF(__pyx_tuple__187);
  __pyx_codeobj__188 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__187, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_contrast_enhancement, 1252, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__188)) __PYX_ERR(0, 1252, __pyx_L1_error)
/* … */
  __pyx_t_37 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 1252, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  if (PyDict_SetItem(__pyx_t_37, __pyx_n_s_insig, __pyx_kp_s_cython_double) < 0) __PYX_ERR(0, 1252, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_37, __pyx_n_s_fm_index, __pyx_kp_s_cython_double) < 0) __PYX_ERR(0, 1252, __pyx_L1_error)
  __pyx_t_40 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_105contrast_enhancement, 0, __pyx_n_s_contrast_enhancement, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__188)); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 1252, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_40, __pyx_tuple__189);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_40, __pyx_t_37);
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_contrast_enhancement, __pyx_t_40) < 0) __PYX_ERR(0, 1252, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
  __pyx_tuple__189 = PyTuple_Pack(1, __pyx_float_1_0); if (unlikely(!__pyx_tuple__189)) __PYX_ERR(0, 1252, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__189);
  __Pyx_GIVEREF(__pyx_tuple__189);
/* … */
struct __pyx_opt_args_8pysndlib_3clm_contrast_enhancement {
  int __pyx_n;
  double fm_index;
};
 1253:     """
 1254:     returns insig (index 1.0)): sin(sig * pi / 2 + fm_index * sin(sig * 2 * pi))
 1255:     contrast_enhancement passes its input to sin as a kind of phase modulation.
 1256:     
 1257:     :param insig: input
 1258:     :param fm_index: 
 1259:     :return: result
 1260:     :rtype: float
 1261:     
 1262:     """
+1263:     return cclm.mus_contrast_enhancement(insig, fm_index)
  __pyx_r = mus_contrast_enhancement(__pyx_v_insig, __pyx_v_fm_index);
  goto __pyx_L0;
 1264: 
 1265: 
+1266: cpdef cython.double dot_product(data1: npt.NDArray[np.float64], data2: npt.NDArray[np.float64]):
static PyObject *__pyx_pw_8pysndlib_3clm_107dot_product(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static double __pyx_f_8pysndlib_3clm_dot_product(PyObject *__pyx_v_data1, PyObject *__pyx_v_data2, CYTHON_UNUSED int __pyx_skip_dispatch) {
  __Pyx_memviewslice __pyx_v_data1_view = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_data2_view = { 0, 0, { 0 }, { 0 }, { 0 } };
  double __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("dot_product", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __PYX_XCLEAR_MEMVIEW(&__pyx_t_5, 1);
  __Pyx_AddTraceback("pysndlib.clm.dot_product", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __PYX_XCLEAR_MEMVIEW(&__pyx_v_data1_view, 1);
  __PYX_XCLEAR_MEMVIEW(&__pyx_v_data2_view, 1);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_107dot_product(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_106dot_product, "\n    returns v1 v2 (size)): sum of v1[i] * v2[i] (also named scalar product).\n    \n    :param data1: input 1\n    :param data2: input 2\n    :return: result\n    :rtype: float\n    \n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_107dot_product = {"dot_product", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_107dot_product, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_106dot_product};
static PyObject *__pyx_pw_8pysndlib_3clm_107dot_product(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_data1 = 0;
  PyObject *__pyx_v_data2 = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("dot_product (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_data1,&__pyx_n_s_data2,0};
    PyObject* values[2] = {0,0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_data1)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1266, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_data2)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1266, __pyx_L3_error)
        else {
          __Pyx_RaiseArgtupleInvalid("dot_product", 1, 2, 2, 1); __PYX_ERR(0, 1266, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "dot_product") < 0)) __PYX_ERR(0, 1266, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 2)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
      values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
    }
    __pyx_v_data1 = values[0];
    __pyx_v_data2 = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("dot_product", 1, 2, 2, __pyx_nargs); __PYX_ERR(0, 1266, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.dot_product", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pysndlib_3clm_106dot_product(__pyx_self, __pyx_v_data1, __pyx_v_data2);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_106dot_product(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_data1, PyObject *__pyx_v_data2) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("dot_product", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_8pysndlib_3clm_dot_product(__pyx_v_data1, __pyx_v_data2, 0); if (unlikely(__pyx_t_1 == ((double)-1) && PyErr_Occurred())) __PYX_ERR(0, 1266, __pyx_L1_error)
  __pyx_t_2 = PyFloat_FromDouble(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1266, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pysndlib.clm.dot_product", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__190 = PyTuple_Pack(2, __pyx_n_s_data1, __pyx_n_s_data2); if (unlikely(!__pyx_tuple__190)) __PYX_ERR(0, 1266, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__190);
  __Pyx_GIVEREF(__pyx_tuple__190);
/* … */
  __pyx_t_40 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 1266, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  if (PyDict_SetItem(__pyx_t_40, __pyx_n_s_data1, __pyx_kp_s_npt_NDArray_np_float64) < 0) __PYX_ERR(0, 1266, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_40, __pyx_n_s_data2, __pyx_kp_s_npt_NDArray_np_float64) < 0) __PYX_ERR(0, 1266, __pyx_L1_error)
  __pyx_t_37 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_107dot_product, 0, __pyx_n_s_dot_product, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__191)); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 1266, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_37, __pyx_t_40);
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_dot_product, __pyx_t_37) < 0) __PYX_ERR(0, 1266, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
  __pyx_codeobj__191 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__190, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_dot_product, 1266, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__191)) __PYX_ERR(0, 1266, __pyx_L1_error)
 1267:     """
 1268:     returns v1 v2 (size)): sum of v1[i] * v2[i] (also named scalar product).
 1269:     
 1270:     :param data1: input 1
 1271:     :param data2: input 2
 1272:     :return: result
 1273:     :rtype: float
 1274:     
 1275:     """
+1276:     check_ndim(data1)
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_check_ndim); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1276, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  __pyx_t_4 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
      __pyx_t_4 = 1;
    }
  }
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_v_data1};
    __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4);
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1276, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+1277:     check_ndim(data2)
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_check_ndim); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1277, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  __pyx_t_4 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
      __pyx_t_4 = 1;
    }
  }
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_v_data2};
    __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4);
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1277, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+1278:     compare_shapes(data1, data2)
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_compare_shapes); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1278, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  __pyx_t_4 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
      __pyx_t_4 = 1;
    }
  }
  {
    PyObject *__pyx_callargs[3] = {__pyx_t_3, __pyx_v_data1, __pyx_v_data2};
    __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 2+__pyx_t_4);
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1278, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 1279: 
+1280:     cdef double [:] data1_view = data1
  __pyx_t_5 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_data1, PyBUF_WRITABLE); if (unlikely(!__pyx_t_5.memview)) __PYX_ERR(0, 1280, __pyx_L1_error)
  __pyx_v_data1_view = __pyx_t_5;
  __pyx_t_5.memview = NULL;
  __pyx_t_5.data = NULL;
+1281:     cdef double [:] data2_view = data2
  __pyx_t_5 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_data2, PyBUF_WRITABLE); if (unlikely(!__pyx_t_5.memview)) __PYX_ERR(0, 1281, __pyx_L1_error)
  __pyx_v_data2_view = __pyx_t_5;
  __pyx_t_5.memview = NULL;
  __pyx_t_5.data = NULL;
+1282:     return cclm.mus_dot_product(&data1_view[0], &data2_view[0], len(data1))
  __pyx_t_6 = 0;
  __pyx_t_4 = -1;
  if (__pyx_t_6 < 0) {
    __pyx_t_6 += __pyx_v_data1_view.shape[0];
    if (unlikely(__pyx_t_6 < 0)) __pyx_t_4 = 0;
  } else if (unlikely(__pyx_t_6 >= __pyx_v_data1_view.shape[0])) __pyx_t_4 = 0;
  if (unlikely(__pyx_t_4 != -1)) {
    __Pyx_RaiseBufferIndexError(__pyx_t_4);
    __PYX_ERR(0, 1282, __pyx_L1_error)
  }
  __pyx_t_7 = 0;
  __pyx_t_4 = -1;
  if (__pyx_t_7 < 0) {
    __pyx_t_7 += __pyx_v_data2_view.shape[0];
    if (unlikely(__pyx_t_7 < 0)) __pyx_t_4 = 0;
  } else if (unlikely(__pyx_t_7 >= __pyx_v_data2_view.shape[0])) __pyx_t_4 = 0;
  if (unlikely(__pyx_t_4 != -1)) {
    __Pyx_RaiseBufferIndexError(__pyx_t_4);
    __PYX_ERR(0, 1282, __pyx_L1_error)
  }
  __pyx_t_8 = PyObject_Length(__pyx_v_data1); if (unlikely(__pyx_t_8 == ((Py_ssize_t)-1))) __PYX_ERR(0, 1282, __pyx_L1_error)
  __pyx_r = mus_dot_product((&(*((double *) ( /* dim=0 */ (__pyx_v_data1_view.data + __pyx_t_6 * __pyx_v_data1_view.strides[0]) )))), (&(*((double *) ( /* dim=0 */ (__pyx_v_data2_view.data + __pyx_t_7 * __pyx_v_data2_view.strides[0]) )))), __pyx_t_8);
  goto __pyx_L0;
 1283: 
+1284: cpdef cython.double polynomial(coeffs: npt.NDArray[np.float64], x: cython.double ):
static PyObject *__pyx_pw_8pysndlib_3clm_109polynomial(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static double __pyx_f_8pysndlib_3clm_polynomial(PyObject *__pyx_v_coeffs, double __pyx_v_x, CYTHON_UNUSED int __pyx_skip_dispatch) {
  __Pyx_memviewslice __pyx_v_coeffs_view = { 0, 0, { 0 }, { 0 }, { 0 } };
  double __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("polynomial", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __PYX_XCLEAR_MEMVIEW(&__pyx_t_5, 1);
  __Pyx_AddTraceback("pysndlib.clm.polynomial", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __PYX_XCLEAR_MEMVIEW(&__pyx_v_coeffs_view, 1);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_109polynomial(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_108polynomial, "\n    evaluate a polynomial at x.  coeffs are in order of degree, so coeff[0] is the constant term.\n    \n    :param coeffs: coefficients where coeffs[0] is the constant term, and so on.\n    :param x: input\n    :return: result\n    :rtype: float\n    \n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_109polynomial = {"polynomial", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_109polynomial, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_108polynomial};
static PyObject *__pyx_pw_8pysndlib_3clm_109polynomial(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_coeffs = 0;
  double __pyx_v_x;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("polynomial (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_coeffs,&__pyx_n_s_x,0};
    PyObject* values[2] = {0,0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_coeffs)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1284, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_x)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1284, __pyx_L3_error)
        else {
          __Pyx_RaiseArgtupleInvalid("polynomial", 1, 2, 2, 1); __PYX_ERR(0, 1284, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "polynomial") < 0)) __PYX_ERR(0, 1284, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 2)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
      values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
    }
    __pyx_v_coeffs = values[0];
    __pyx_v_x = __pyx_PyFloat_AsDouble(values[1]); if (unlikely((__pyx_v_x == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 1284, __pyx_L3_error)
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("polynomial", 1, 2, 2, __pyx_nargs); __PYX_ERR(0, 1284, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.polynomial", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pysndlib_3clm_108polynomial(__pyx_self, __pyx_v_coeffs, __pyx_v_x);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_108polynomial(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_coeffs, double __pyx_v_x) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("polynomial", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_8pysndlib_3clm_polynomial(__pyx_v_coeffs, __pyx_v_x, 0); if (unlikely(__pyx_t_1 == ((double)-1) && PyErr_Occurred())) __PYX_ERR(0, 1284, __pyx_L1_error)
  __pyx_t_2 = PyFloat_FromDouble(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1284, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pysndlib.clm.polynomial", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__192 = PyTuple_Pack(2, __pyx_n_s_coeffs, __pyx_n_s_x); if (unlikely(!__pyx_tuple__192)) __PYX_ERR(0, 1284, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__192);
  __Pyx_GIVEREF(__pyx_tuple__192);
/* … */
  __pyx_t_37 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 1284, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  if (PyDict_SetItem(__pyx_t_37, __pyx_n_s_coeffs, __pyx_kp_s_npt_NDArray_np_float64) < 0) __PYX_ERR(0, 1284, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_37, __pyx_n_s_x, __pyx_kp_s_cython_double) < 0) __PYX_ERR(0, 1284, __pyx_L1_error)
  __pyx_t_40 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_109polynomial, 0, __pyx_n_s_polynomial, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__193)); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 1284, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_40, __pyx_t_37);
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_polynomial, __pyx_t_40) < 0) __PYX_ERR(0, 1284, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
  __pyx_codeobj__193 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__192, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_polynomial, 1284, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__193)) __PYX_ERR(0, 1284, __pyx_L1_error)
 1285:     """
 1286:     evaluate a polynomial at x.  coeffs are in order of degree, so coeff[0] is the constant term.
 1287:     
 1288:     :param coeffs: coefficients where coeffs[0] is the constant term, and so on.
 1289:     :param x: input
 1290:     :return: result
 1291:     :rtype: float
 1292:     
 1293:     """
+1294:     check_ndim(coeffs)
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_check_ndim); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1294, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  __pyx_t_4 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
      __pyx_t_4 = 1;
    }
  }
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_v_coeffs};
    __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4);
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1294, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+1295:     cdef double [:] coeffs_view = coeffs
  __pyx_t_5 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_coeffs, PyBUF_WRITABLE); if (unlikely(!__pyx_t_5.memview)) __PYX_ERR(0, 1295, __pyx_L1_error)
  __pyx_v_coeffs_view = __pyx_t_5;
  __pyx_t_5.memview = NULL;
  __pyx_t_5.data = NULL;
+1296:     return cclm.mus_polynomial(&coeffs_view[0], x, len(coeffs))
  __pyx_t_6 = 0;
  __pyx_t_4 = -1;
  if (__pyx_t_6 < 0) {
    __pyx_t_6 += __pyx_v_coeffs_view.shape[0];
    if (unlikely(__pyx_t_6 < 0)) __pyx_t_4 = 0;
  } else if (unlikely(__pyx_t_6 >= __pyx_v_coeffs_view.shape[0])) __pyx_t_4 = 0;
  if (unlikely(__pyx_t_4 != -1)) {
    __Pyx_RaiseBufferIndexError(__pyx_t_4);
    __PYX_ERR(0, 1296, __pyx_L1_error)
  }
  __pyx_t_7 = PyObject_Length(__pyx_v_coeffs); if (unlikely(__pyx_t_7 == ((Py_ssize_t)-1))) __PYX_ERR(0, 1296, __pyx_L1_error)
  __pyx_r = mus_polynomial((&(*((double *) ( /* dim=0 */ (__pyx_v_coeffs_view.data + __pyx_t_6 * __pyx_v_coeffs_view.strides[0]) )))), __pyx_v_x, __pyx_t_7);
  goto __pyx_L0;
 1297: 
+1298: cpdef cython.double array_interp(fn: npt.NDArray[np.float64], x: cython.double):
static PyObject *__pyx_pw_8pysndlib_3clm_111array_interp(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static double __pyx_f_8pysndlib_3clm_array_interp(PyObject *__pyx_v_fn, double __pyx_v_x, CYTHON_UNUSED int __pyx_skip_dispatch) {
  __Pyx_memviewslice __pyx_v_fn_view = { 0, 0, { 0 }, { 0 }, { 0 } };
  double __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("array_interp", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __PYX_XCLEAR_MEMVIEW(&__pyx_t_5, 1);
  __Pyx_AddTraceback("pysndlib.clm.array_interp", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __PYX_XCLEAR_MEMVIEW(&__pyx_v_fn_view, 1);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_111array_interp(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_110array_interp, "\n    taking into account wrap-around (size is size of data), with linear interpolation if phase is not an integer.\n    \n    :param fn: input array\n    :param x: interp point\n    :return: result\n    :rtype: float\n    \n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_111array_interp = {"array_interp", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_111array_interp, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_110array_interp};
static PyObject *__pyx_pw_8pysndlib_3clm_111array_interp(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_fn = 0;
  double __pyx_v_x;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("array_interp (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_fn,&__pyx_n_s_x,0};
    PyObject* values[2] = {0,0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_fn)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1298, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_x)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1298, __pyx_L3_error)
        else {
          __Pyx_RaiseArgtupleInvalid("array_interp", 1, 2, 2, 1); __PYX_ERR(0, 1298, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "array_interp") < 0)) __PYX_ERR(0, 1298, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 2)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
      values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
    }
    __pyx_v_fn = values[0];
    __pyx_v_x = __pyx_PyFloat_AsDouble(values[1]); if (unlikely((__pyx_v_x == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 1298, __pyx_L3_error)
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("array_interp", 1, 2, 2, __pyx_nargs); __PYX_ERR(0, 1298, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.array_interp", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pysndlib_3clm_110array_interp(__pyx_self, __pyx_v_fn, __pyx_v_x);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_110array_interp(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_fn, double __pyx_v_x) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("array_interp", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_8pysndlib_3clm_array_interp(__pyx_v_fn, __pyx_v_x, 0); if (unlikely(__pyx_t_1 == ((double)-1) && PyErr_Occurred())) __PYX_ERR(0, 1298, __pyx_L1_error)
  __pyx_t_2 = PyFloat_FromDouble(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1298, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pysndlib.clm.array_interp", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__194 = PyTuple_Pack(2, __pyx_n_s_fn, __pyx_n_s_x); if (unlikely(!__pyx_tuple__194)) __PYX_ERR(0, 1298, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__194);
  __Pyx_GIVEREF(__pyx_tuple__194);
/* … */
  __pyx_t_40 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 1298, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  if (PyDict_SetItem(__pyx_t_40, __pyx_n_s_fn, __pyx_kp_s_npt_NDArray_np_float64) < 0) __PYX_ERR(0, 1298, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_40, __pyx_n_s_x, __pyx_kp_s_cython_double) < 0) __PYX_ERR(0, 1298, __pyx_L1_error)
  __pyx_t_37 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_111array_interp, 0, __pyx_n_s_array_interp, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__195)); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 1298, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_37, __pyx_t_40);
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_array_interp, __pyx_t_37) < 0) __PYX_ERR(0, 1298, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
  __pyx_codeobj__195 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__194, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_array_interp, 1298, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__195)) __PYX_ERR(0, 1298, __pyx_L1_error)
 1299:     """
 1300:     taking into account wrap-around (size is size of data), with linear interpolation if phase is not an integer.
 1301:     
 1302:     :param fn: input array
 1303:     :param x: interp point
 1304:     :return: result
 1305:     :rtype: float
 1306:     
 1307:     """
+1308:     check_ndim(fn)
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_check_ndim); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1308, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  __pyx_t_4 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
      __pyx_t_4 = 1;
    }
  }
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_v_fn};
    __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4);
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1308, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+1309:     cdef double [:] fn_view = fn
  __pyx_t_5 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_fn, PyBUF_WRITABLE); if (unlikely(!__pyx_t_5.memview)) __PYX_ERR(0, 1309, __pyx_L1_error)
  __pyx_v_fn_view = __pyx_t_5;
  __pyx_t_5.memview = NULL;
  __pyx_t_5.data = NULL;
+1310:     return cclm.mus_array_interp(&fn_view[0], x, len(fn))
  __pyx_t_6 = 0;
  __pyx_t_4 = -1;
  if (__pyx_t_6 < 0) {
    __pyx_t_6 += __pyx_v_fn_view.shape[0];
    if (unlikely(__pyx_t_6 < 0)) __pyx_t_4 = 0;
  } else if (unlikely(__pyx_t_6 >= __pyx_v_fn_view.shape[0])) __pyx_t_4 = 0;
  if (unlikely(__pyx_t_4 != -1)) {
    __Pyx_RaiseBufferIndexError(__pyx_t_4);
    __PYX_ERR(0, 1310, __pyx_L1_error)
  }
  __pyx_t_7 = PyObject_Length(__pyx_v_fn); if (unlikely(__pyx_t_7 == ((Py_ssize_t)-1))) __PYX_ERR(0, 1310, __pyx_L1_error)
  __pyx_r = mus_array_interp((&(*((double *) ( /* dim=0 */ (__pyx_v_fn_view.data + __pyx_t_6 * __pyx_v_fn_view.strides[0]) )))), __pyx_v_x, __pyx_t_7);
  goto __pyx_L0;
 1311: 
+1312: cpdef cython.double bessi0(x: cython.double):
static PyObject *__pyx_pw_8pysndlib_3clm_113bessi0(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static double __pyx_f_8pysndlib_3clm_bessi0(double __pyx_v_x, CYTHON_UNUSED int __pyx_skip_dispatch) {
  double __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("bessi0", 0);
/* … */
  /* function exit code */
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_113bessi0(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_112bessi0, "\n    bessel function of zeroth order\n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_113bessi0 = {"bessi0", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_113bessi0, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_112bessi0};
static PyObject *__pyx_pw_8pysndlib_3clm_113bessi0(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  double __pyx_v_x;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("bessi0 (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_x,0};
    PyObject* values[1] = {0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_x)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1312, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "bessi0") < 0)) __PYX_ERR(0, 1312, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
    }
    __pyx_v_x = __pyx_PyFloat_AsDouble(values[0]); if (unlikely((__pyx_v_x == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 1312, __pyx_L3_error)
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("bessi0", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 1312, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.bessi0", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pysndlib_3clm_112bessi0(__pyx_self, __pyx_v_x);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_112bessi0(CYTHON_UNUSED PyObject *__pyx_self, double __pyx_v_x) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("bessi0", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_8pysndlib_3clm_bessi0(__pyx_v_x, 0); if (unlikely(__pyx_t_1 == ((double)-1) && PyErr_Occurred())) __PYX_ERR(0, 1312, __pyx_L1_error)
  __pyx_t_2 = PyFloat_FromDouble(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1312, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pysndlib.clm.bessi0", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_37 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 1312, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  if (PyDict_SetItem(__pyx_t_37, __pyx_n_s_x, __pyx_kp_s_cython_double) < 0) __PYX_ERR(0, 1312, __pyx_L1_error)
  __pyx_t_40 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_113bessi0, 0, __pyx_n_s_bessi0, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__196)); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 1312, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_40, __pyx_t_37);
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_bessi0, __pyx_t_40) < 0) __PYX_ERR(0, 1312, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
/* … */
  __pyx_codeobj__196 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__127, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_bessi0, 1312, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__196)) __PYX_ERR(0, 1312, __pyx_L1_error)
 1313:     """
 1314:     bessel function of zeroth order
 1315:     """
+1316:     return cclm.mus_bessi0(x)
  __pyx_r = mus_bessi0(__pyx_v_x);
  goto __pyx_L0;
 1317: 
+1318: cpdef cython.double mus_interpolate(interp_type: Interp, x: cython.double, table: npt.NDArray[np.float64], y1: cython.double = 0.):
static PyObject *__pyx_pw_8pysndlib_3clm_115mus_interpolate(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static double __pyx_f_8pysndlib_3clm_mus_interpolate(enum __pyx_t_8pysndlib_3clm_Interp __pyx_v_interp_type, double __pyx_v_x, PyObject *__pyx_v_table, CYTHON_UNUSED int __pyx_skip_dispatch, struct __pyx_opt_args_8pysndlib_3clm_mus_interpolate *__pyx_optional_args) {
  double __pyx_v_y1 = ((double)0.);
  __Pyx_memviewslice __pyx_v_table_view = { 0, 0, { 0 }, { 0 }, { 0 } };
  double __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("mus_interpolate", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_y1 = __pyx_optional_args->y1;
    }
  }
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __PYX_XCLEAR_MEMVIEW(&__pyx_t_5, 1);
  __Pyx_AddTraceback("pysndlib.clm.mus_interpolate", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __PYX_XCLEAR_MEMVIEW(&__pyx_v_table_view, 1);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_115mus_interpolate(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_114mus_interpolate, "\n    interpolate in data ('table' is a ndarray) using interpolation 'type', such as Interp.linear.\n    \n    :param interp_type: type of interpolation\n    :param x: interpolation value\n    :param table: table to interpolate in\n    :return: result\n    :rtype: float\n    \n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_115mus_interpolate = {"mus_interpolate", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_115mus_interpolate, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_114mus_interpolate};
static PyObject *__pyx_pw_8pysndlib_3clm_115mus_interpolate(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  enum __pyx_t_8pysndlib_3clm_Interp __pyx_v_interp_type;
  double __pyx_v_x;
  PyObject *__pyx_v_table = 0;
  double __pyx_v_y1;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("mus_interpolate (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_interp_type,&__pyx_n_s_x,&__pyx_n_s_table,&__pyx_n_s_y1,0};
    PyObject* values[4] = {0,0,0,0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  4: values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_interp_type)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1318, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_x)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1318, __pyx_L3_error)
        else {
          __Pyx_RaiseArgtupleInvalid("mus_interpolate", 0, 3, 4, 1); __PYX_ERR(0, 1318, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_table)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1318, __pyx_L3_error)
        else {
          __Pyx_RaiseArgtupleInvalid("mus_interpolate", 0, 3, 4, 2); __PYX_ERR(0, 1318, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_y1);
          if (value) { values[3] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1318, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "mus_interpolate") < 0)) __PYX_ERR(0, 1318, __pyx_L3_error)
      }
    } else {
      switch (__pyx_nargs) {
        case  4: values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
        values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_interp_type = ((enum __pyx_t_8pysndlib_3clm_Interp)__Pyx_PyInt_As_enum____pyx_t_8pysndlib_3clm_Interp(values[0])); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1318, __pyx_L3_error)
    __pyx_v_x = __pyx_PyFloat_AsDouble(values[1]); if (unlikely((__pyx_v_x == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 1318, __pyx_L3_error)
    __pyx_v_table = values[2];
    if (values[3]) {
      __pyx_v_y1 = __pyx_PyFloat_AsDouble(values[3]); if (unlikely((__pyx_v_y1 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 1318, __pyx_L3_error)
    } else {
      __pyx_v_y1 = ((double)0.);
    }
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("mus_interpolate", 0, 3, 4, __pyx_nargs); __PYX_ERR(0, 1318, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.mus_interpolate", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pysndlib_3clm_114mus_interpolate(__pyx_self, __pyx_v_interp_type, __pyx_v_x, __pyx_v_table, __pyx_v_y1);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_114mus_interpolate(CYTHON_UNUSED PyObject *__pyx_self, enum __pyx_t_8pysndlib_3clm_Interp __pyx_v_interp_type, double __pyx_v_x, PyObject *__pyx_v_table, double __pyx_v_y1) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("mus_interpolate", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2.__pyx_n = 1;
  __pyx_t_2.y1 = __pyx_v_y1;
  __pyx_t_1 = __pyx_f_8pysndlib_3clm_mus_interpolate(__pyx_v_interp_type, __pyx_v_x, __pyx_v_table, 0, &__pyx_t_2); if (unlikely(__pyx_t_1 == ((double)-1) && PyErr_Occurred())) __PYX_ERR(0, 1318, __pyx_L1_error)
  __pyx_t_3 = PyFloat_FromDouble(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1318, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_r = __pyx_t_3;
  __pyx_t_3 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("pysndlib.clm.mus_interpolate", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__197 = PyTuple_Pack(4, __pyx_n_s_interp_type, __pyx_n_s_x, __pyx_n_s_table, __pyx_n_s_y1); if (unlikely(!__pyx_tuple__197)) __PYX_ERR(0, 1318, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__197);
  __Pyx_GIVEREF(__pyx_tuple__197);
  __pyx_codeobj__198 = (PyObject*)__Pyx_PyCode_New(4, 0, 0, 4, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__197, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_mus_interpolate, 1318, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__198)) __PYX_ERR(0, 1318, __pyx_L1_error)
/* … */
  __pyx_t_40 = __Pyx_PyDict_NewPresized(4); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 1318, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  if (PyDict_SetItem(__pyx_t_40, __pyx_n_s_interp_type, __pyx_n_s_Interp) < 0) __PYX_ERR(0, 1318, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_40, __pyx_n_s_x, __pyx_kp_s_cython_double) < 0) __PYX_ERR(0, 1318, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_40, __pyx_n_s_table, __pyx_kp_s_npt_NDArray_np_float64) < 0) __PYX_ERR(0, 1318, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_40, __pyx_n_s_y1, __pyx_kp_s_cython_double) < 0) __PYX_ERR(0, 1318, __pyx_L1_error)
  __pyx_t_37 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_115mus_interpolate, 0, __pyx_n_s_mus_interpolate, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__198)); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 1318, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_37, __pyx_tuple__199);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_37, __pyx_t_40);
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_mus_interpolate, __pyx_t_37) < 0) __PYX_ERR(0, 1318, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
  __pyx_tuple__199 = PyTuple_Pack(1, __pyx_float_0_); if (unlikely(!__pyx_tuple__199)) __PYX_ERR(0, 1318, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__199);
  __Pyx_GIVEREF(__pyx_tuple__199);
/* … */
struct __pyx_opt_args_8pysndlib_3clm_mus_interpolate {
  int __pyx_n;
  double y1;
};
 1319:     """
 1320:     interpolate in data ('table' is a ndarray) using interpolation 'type', such as Interp.linear.
 1321:     
 1322:     :param interp_type: type of interpolation
 1323:     :param x: interpolation value
 1324:     :param table: table to interpolate in
 1325:     :return: result
 1326:     :rtype: float
 1327:     
 1328:     """
+1329:     check_ndim(table)
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_check_ndim); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1329, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  __pyx_t_4 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
      __pyx_t_4 = 1;
    }
  }
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_v_table};
    __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4);
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1329, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+1330:     cdef double [:] table_view = table
  __pyx_t_5 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_table, PyBUF_WRITABLE); if (unlikely(!__pyx_t_5.memview)) __PYX_ERR(0, 1330, __pyx_L1_error)
  __pyx_v_table_view = __pyx_t_5;
  __pyx_t_5.memview = NULL;
  __pyx_t_5.data = NULL;
+1331:     return cclm.mus_interpolate(<cclm.mus_interp_t>interp_type, x, &table_view[0], len(table), y1)
  __pyx_t_6 = 0;
  __pyx_t_4 = -1;
  if (__pyx_t_6 < 0) {
    __pyx_t_6 += __pyx_v_table_view.shape[0];
    if (unlikely(__pyx_t_6 < 0)) __pyx_t_4 = 0;
  } else if (unlikely(__pyx_t_6 >= __pyx_v_table_view.shape[0])) __pyx_t_4 = 0;
  if (unlikely(__pyx_t_4 != -1)) {
    __Pyx_RaiseBufferIndexError(__pyx_t_4);
    __PYX_ERR(0, 1331, __pyx_L1_error)
  }
  __pyx_t_7 = PyObject_Length(__pyx_v_table); if (unlikely(__pyx_t_7 == ((Py_ssize_t)-1))) __PYX_ERR(0, 1331, __pyx_L1_error)
  __pyx_r = mus_interpolate(((mus_interp_t)__pyx_v_interp_type), __pyx_v_x, (&(*((double *) ( /* dim=0 */ (__pyx_v_table_view.data + __pyx_t_6 * __pyx_v_table_view.strides[0]) )))), __pyx_t_7, __pyx_v_y1);
  goto __pyx_L0;
 1332: 
+1333: cpdef np.ndarray fft(rdat: npt.NDArray[np.float64], idat: npt.NDArray[np.float64], fft_size: int, sign: int):
static PyObject *__pyx_pw_8pysndlib_3clm_117fft(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyArrayObject *__pyx_f_8pysndlib_3clm_fft(PyObject *__pyx_v_rdat, PyObject *__pyx_v_idat, PyObject *__pyx_v_fft_size, PyObject *__pyx_v_sign, CYTHON_UNUSED int __pyx_skip_dispatch) {
  __Pyx_memviewslice __pyx_v_rdat_view = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_idat_view = { 0, 0, { 0 }, { 0 }, { 0 } };
  CYTHON_UNUSED PyObject *__pyx_v_res = NULL;
  PyArrayObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("fft", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __PYX_XCLEAR_MEMVIEW(&__pyx_t_5, 1);
  __Pyx_AddTraceback("pysndlib.clm.fft", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __PYX_XCLEAR_MEMVIEW(&__pyx_v_rdat_view, 1);
  __PYX_XCLEAR_MEMVIEW(&__pyx_v_idat_view, 1);
  __Pyx_XDECREF(__pyx_v_res);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_117fft(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_116fft, "\n    return the fft of rl and im which contain the real and imaginary parts of the data; len should be a\n    power of 2, dir = 1 for fft, -1 for inverse-fft.\n    \n    :param rdat: real data\n    :param imaginary: imaginary data\n    :param fft_size: must be power of two\n    :param sign: 1 for fft, -1 for inverse-fft\n    :return: result written into rdat\n    :rtype: np.ndarray\n    \n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_117fft = {"fft", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_117fft, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_116fft};
static PyObject *__pyx_pw_8pysndlib_3clm_117fft(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_rdat = 0;
  PyObject *__pyx_v_idat = 0;
  PyObject *__pyx_v_fft_size = 0;
  PyObject *__pyx_v_sign = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("fft (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_rdat,&__pyx_n_s_idat,&__pyx_n_s_fft_size,&__pyx_n_s_sign,0};
    PyObject* values[4] = {0,0,0,0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  4: values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_rdat)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1333, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_idat)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1333, __pyx_L3_error)
        else {
          __Pyx_RaiseArgtupleInvalid("fft", 1, 4, 4, 1); __PYX_ERR(0, 1333, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_fft_size)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1333, __pyx_L3_error)
        else {
          __Pyx_RaiseArgtupleInvalid("fft", 1, 4, 4, 2); __PYX_ERR(0, 1333, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (likely((values[3] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_sign)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1333, __pyx_L3_error)
        else {
          __Pyx_RaiseArgtupleInvalid("fft", 1, 4, 4, 3); __PYX_ERR(0, 1333, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "fft") < 0)) __PYX_ERR(0, 1333, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 4)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
      values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
      values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
      values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3);
    }
    __pyx_v_rdat = values[0];
    __pyx_v_idat = values[1];
    __pyx_v_fft_size = ((PyObject*)values[2]);
    __pyx_v_sign = ((PyObject*)values[3]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("fft", 1, 4, 4, __pyx_nargs); __PYX_ERR(0, 1333, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.fft", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_fft_size), (&PyInt_Type), 0, "fft_size", 1))) __PYX_ERR(0, 1333, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_sign), (&PyInt_Type), 0, "sign", 1))) __PYX_ERR(0, 1333, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pysndlib_3clm_116fft(__pyx_self, __pyx_v_rdat, __pyx_v_idat, __pyx_v_fft_size, __pyx_v_sign);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_116fft(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_rdat, PyObject *__pyx_v_idat, PyObject *__pyx_v_fft_size, PyObject *__pyx_v_sign) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("fft", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = ((PyObject *)__pyx_f_8pysndlib_3clm_fft(__pyx_v_rdat, __pyx_v_idat, __pyx_v_fft_size, __pyx_v_sign, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1333, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pysndlib.clm.fft", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__200 = PyTuple_Pack(4, __pyx_n_s_rdat, __pyx_n_s_idat, __pyx_n_s_fft_size, __pyx_n_s_sign); if (unlikely(!__pyx_tuple__200)) __PYX_ERR(0, 1333, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__200);
  __Pyx_GIVEREF(__pyx_tuple__200);
/* … */
  __pyx_t_37 = __Pyx_PyDict_NewPresized(4); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 1333, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  if (PyDict_SetItem(__pyx_t_37, __pyx_n_s_rdat, __pyx_kp_s_npt_NDArray_np_float64) < 0) __PYX_ERR(0, 1333, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_37, __pyx_n_s_idat, __pyx_kp_s_npt_NDArray_np_float64) < 0) __PYX_ERR(0, 1333, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_37, __pyx_n_s_fft_size, __pyx_n_s_int_2) < 0) __PYX_ERR(0, 1333, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_37, __pyx_n_s_sign, __pyx_n_s_int_2) < 0) __PYX_ERR(0, 1333, __pyx_L1_error)
  __pyx_t_40 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_117fft, 0, __pyx_n_s_fft, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__201)); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 1333, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_40, __pyx_t_37);
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_fft, __pyx_t_40) < 0) __PYX_ERR(0, 1333, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
  __pyx_codeobj__201 = (PyObject*)__Pyx_PyCode_New(4, 0, 0, 4, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__200, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_fft, 1333, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__201)) __PYX_ERR(0, 1333, __pyx_L1_error)
 1334:     """
 1335:     return the fft of rl and im which contain the real and imaginary parts of the data; len should be a
 1336:     power of 2, dir = 1 for fft, -1 for inverse-fft.
 1337:     
 1338:     :param rdat: real data
 1339:     :param imaginary: imaginary data
 1340:     :param fft_size: must be power of two
 1341:     :param sign: 1 for fft, -1 for inverse-fft
 1342:     :return: result written into rdat
 1343:     :rtype: np.ndarray
 1344:     
 1345:     """
+1346:     check_ndim(rdat)
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_check_ndim); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1346, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  __pyx_t_4 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
      __pyx_t_4 = 1;
    }
  }
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_v_rdat};
    __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4);
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1346, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+1347:     check_ndim(idat)
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_check_ndim); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1347, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  __pyx_t_4 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
      __pyx_t_4 = 1;
    }
  }
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_v_idat};
    __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4);
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1347, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+1348:     compare_shapes(rdat, idat)
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_compare_shapes); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1348, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  __pyx_t_4 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
      __pyx_t_4 = 1;
    }
  }
  {
    PyObject *__pyx_callargs[3] = {__pyx_t_3, __pyx_v_rdat, __pyx_v_idat};
    __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 2+__pyx_t_4);
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1348, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 1349: 
+1350:     cdef double [:] rdat_view = rdat
  __pyx_t_5 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_rdat, PyBUF_WRITABLE); if (unlikely(!__pyx_t_5.memview)) __PYX_ERR(0, 1350, __pyx_L1_error)
  __pyx_v_rdat_view = __pyx_t_5;
  __pyx_t_5.memview = NULL;
  __pyx_t_5.data = NULL;
+1351:     cdef double [:] idat_view = idat
  __pyx_t_5 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_idat, PyBUF_WRITABLE); if (unlikely(!__pyx_t_5.memview)) __PYX_ERR(0, 1351, __pyx_L1_error)
  __pyx_v_idat_view = __pyx_t_5;
  __pyx_t_5.memview = NULL;
  __pyx_t_5.data = NULL;
+1352:     res = cclm.mus_fft(&rdat_view[0], &idat_view[0], fft_size, sign)
  __pyx_t_6 = 0;
  __pyx_t_4 = -1;
  if (__pyx_t_6 < 0) {
    __pyx_t_6 += __pyx_v_rdat_view.shape[0];
    if (unlikely(__pyx_t_6 < 0)) __pyx_t_4 = 0;
  } else if (unlikely(__pyx_t_6 >= __pyx_v_rdat_view.shape[0])) __pyx_t_4 = 0;
  if (unlikely(__pyx_t_4 != -1)) {
    __Pyx_RaiseBufferIndexError(__pyx_t_4);
    __PYX_ERR(0, 1352, __pyx_L1_error)
  }
  __pyx_t_7 = 0;
  __pyx_t_4 = -1;
  if (__pyx_t_7 < 0) {
    __pyx_t_7 += __pyx_v_idat_view.shape[0];
    if (unlikely(__pyx_t_7 < 0)) __pyx_t_4 = 0;
  } else if (unlikely(__pyx_t_7 >= __pyx_v_idat_view.shape[0])) __pyx_t_4 = 0;
  if (unlikely(__pyx_t_4 != -1)) {
    __Pyx_RaiseBufferIndexError(__pyx_t_4);
    __PYX_ERR(0, 1352, __pyx_L1_error)
  }
  __pyx_t_8 = __Pyx_PyInt_As_mus_long_t(__pyx_v_fft_size); if (unlikely((__pyx_t_8 == ((mus_long_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 1352, __pyx_L1_error)
  __pyx_t_4 = __Pyx_PyInt_As_int(__pyx_v_sign); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1352, __pyx_L1_error)
  __pyx_t_1 = __Pyx_void_to_None(mus_fft((&(*((double *) ( /* dim=0 */ (__pyx_v_rdat_view.data + __pyx_t_6 * __pyx_v_rdat_view.strides[0]) )))), (&(*((double *) ( /* dim=0 */ (__pyx_v_idat_view.data + __pyx_t_7 * __pyx_v_idat_view.strides[0]) )))), __pyx_t_8, __pyx_t_4)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1352, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_res = __pyx_t_1;
  __pyx_t_1 = 0;
+1353:     return rdat
  __Pyx_XDECREF((PyObject *)__pyx_r);
  if (!(likely(((__pyx_v_rdat) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_rdat, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1353, __pyx_L1_error)
  __Pyx_INCREF(__pyx_v_rdat);
  __pyx_r = ((PyArrayObject *)__pyx_v_rdat);
  goto __pyx_L0;
 1354: 
+1355: cpdef np.ndarray make_fft_window(window_type: Window, size: int, beta: Optional[float]=0.0, alpha: Optional[float]=0.0):
static PyObject *__pyx_pw_8pysndlib_3clm_119make_fft_window(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyArrayObject *__pyx_f_8pysndlib_3clm_make_fft_window(enum __pyx_t_8pysndlib_3clm_Window __pyx_v_window_type, PyObject *__pyx_v_size, CYTHON_UNUSED int __pyx_skip_dispatch, struct __pyx_opt_args_8pysndlib_3clm_make_fft_window *__pyx_optional_args) {
  PyObject *__pyx_v_beta = ((PyObject *)__pyx_float_0_0);
  PyObject *__pyx_v_alpha = ((PyObject *)__pyx_float_0_0);
  PyObject *__pyx_v_win = NULL;
  __Pyx_memviewslice __pyx_v_win_view = { 0, 0, { 0 }, { 0 }, { 0 } };
  PyArrayObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("make_fft_window", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_beta = __pyx_optional_args->beta;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_alpha = __pyx_optional_args->alpha;
      }
    }
  }
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __PYX_XCLEAR_MEMVIEW(&__pyx_t_7, 1);
  __Pyx_AddTraceback("pysndlib.clm.make_fft_window", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_win);
  __PYX_XCLEAR_MEMVIEW(&__pyx_v_win_view, 1);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_119make_fft_window(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_118make_fft_window, "\n    fft data window (a ndarray). type is one of the sndlib fft window identifiers such as\n    window.kaiser, beta is the window family parameter, if any.\n    \n    :param window_type: type of window\n    :param size: window size\n    :param beta: beta parameter if needed\n    :param alpha: alpha parameter if needed\n    :return: window\n    :rtype: np.ndarray\n    \n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_119make_fft_window = {"make_fft_window", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_119make_fft_window, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_118make_fft_window};
static PyObject *__pyx_pw_8pysndlib_3clm_119make_fft_window(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  enum __pyx_t_8pysndlib_3clm_Window __pyx_v_window_type;
  PyObject *__pyx_v_size = 0;
  PyObject *__pyx_v_beta = 0;
  PyObject *__pyx_v_alpha = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("make_fft_window (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_window_type,&__pyx_n_s_size,&__pyx_n_s_beta,&__pyx_n_s_alpha,0};
    PyObject* values[4] = {0,0,0,0};
    values[2] = ((PyObject *)__pyx_float_0_0);
    values[3] = ((PyObject *)__pyx_float_0_0);
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  4: values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_window_type)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1355, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_size)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1355, __pyx_L3_error)
        else {
          __Pyx_RaiseArgtupleInvalid("make_fft_window", 0, 2, 4, 1); __PYX_ERR(0, 1355, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_beta);
          if (value) { values[2] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1355, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_alpha);
          if (value) { values[3] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1355, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "make_fft_window") < 0)) __PYX_ERR(0, 1355, __pyx_L3_error)
      }
    } else {
      switch (__pyx_nargs) {
        case  4: values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_window_type = ((enum __pyx_t_8pysndlib_3clm_Window)__Pyx_PyInt_As_enum____pyx_t_8pysndlib_3clm_Window(values[0])); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1355, __pyx_L3_error)
    __pyx_v_size = ((PyObject*)values[1]);
    __pyx_v_beta = values[2];
    __pyx_v_alpha = values[3];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("make_fft_window", 0, 2, 4, __pyx_nargs); __PYX_ERR(0, 1355, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.make_fft_window", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_size), (&PyInt_Type), 0, "size", 1))) __PYX_ERR(0, 1355, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pysndlib_3clm_118make_fft_window(__pyx_self, __pyx_v_window_type, __pyx_v_size, __pyx_v_beta, __pyx_v_alpha);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_118make_fft_window(CYTHON_UNUSED PyObject *__pyx_self, enum __pyx_t_8pysndlib_3clm_Window __pyx_v_window_type, PyObject *__pyx_v_size, PyObject *__pyx_v_beta, PyObject *__pyx_v_alpha) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("make_fft_window", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2.__pyx_n = 2;
  __pyx_t_2.beta = __pyx_v_beta;
  __pyx_t_2.alpha = __pyx_v_alpha;
  __pyx_t_1 = ((PyObject *)__pyx_f_8pysndlib_3clm_make_fft_window(__pyx_v_window_type, __pyx_v_size, 0, &__pyx_t_2)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1355, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pysndlib.clm.make_fft_window", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__202 = PyTuple_Pack(4, __pyx_n_s_window_type, __pyx_n_s_size, __pyx_n_s_beta, __pyx_n_s_alpha); if (unlikely(!__pyx_tuple__202)) __PYX_ERR(0, 1355, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__202);
  __Pyx_GIVEREF(__pyx_tuple__202);
  __pyx_codeobj__203 = (PyObject*)__Pyx_PyCode_New(4, 0, 0, 4, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__202, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_make_fft_window, 1355, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__203)) __PYX_ERR(0, 1355, __pyx_L1_error)
/* … */
  __pyx_t_40 = __Pyx_PyDict_NewPresized(4); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 1355, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  if (PyDict_SetItem(__pyx_t_40, __pyx_n_s_window_type, __pyx_n_s_Window) < 0) __PYX_ERR(0, 1355, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_40, __pyx_n_s_size, __pyx_n_s_int_2) < 0) __PYX_ERR(0, 1355, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_40, __pyx_n_s_beta, __pyx_kp_s_Optional_float) < 0) __PYX_ERR(0, 1355, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_40, __pyx_n_s_alpha, __pyx_kp_s_Optional_float) < 0) __PYX_ERR(0, 1355, __pyx_L1_error)
  __pyx_t_37 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_119make_fft_window, 0, __pyx_n_s_make_fft_window, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__203)); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 1355, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_37, __pyx_tuple__204);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_37, __pyx_t_40);
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_make_fft_window, __pyx_t_37) < 0) __PYX_ERR(0, 1355, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
  __pyx_tuple__204 = PyTuple_Pack(2, __pyx_float_0_0, __pyx_float_0_0); if (unlikely(!__pyx_tuple__204)) __PYX_ERR(0, 1355, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__204);
  __Pyx_GIVEREF(__pyx_tuple__204);
/* … */
struct __pyx_opt_args_8pysndlib_3clm_make_fft_window {
  int __pyx_n;
  PyObject *beta;
  PyObject *alpha;
};
 1356:     """
 1357:     fft data window (a ndarray). type is one of the sndlib fft window identifiers such as
 1358:     window.kaiser, beta is the window family parameter, if any.
 1359:     
 1360:     :param window_type: type of window
 1361:     :param size: window size
 1362:     :param beta: beta parameter if needed
 1363:     :param alpha: alpha parameter if needed
 1364:     :return: window
 1365:     :rtype: np.ndarray
 1366:     
 1367:     """
+1368:     win = np.zeros(size, dtype=np.double)
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1368, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_zeros); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1368, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1368, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_INCREF(__pyx_v_size);
  __Pyx_GIVEREF(__pyx_v_size);
  PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_size);
  __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1368, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1368, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_double); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1368, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_dtype, __pyx_t_5) < 0) __PYX_ERR(0, 1368, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_1, __pyx_t_3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1368, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_v_win = __pyx_t_5;
  __pyx_t_5 = 0;
+1369:     check_ndim(win)
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_check_ndim); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1369, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_1 = NULL;
  __pyx_t_6 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_3);
    if (likely(__pyx_t_1)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_1);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_3, function);
      __pyx_t_6 = 1;
    }
  }
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_1, __pyx_v_win};
    __pyx_t_5 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_6, 1+__pyx_t_6);
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1369, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  }
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 1370: 
+1371:     cdef double [:] win_view = win
  __pyx_t_7 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_win, PyBUF_WRITABLE); if (unlikely(!__pyx_t_7.memview)) __PYX_ERR(0, 1371, __pyx_L1_error)
  __pyx_v_win_view = __pyx_t_7;
  __pyx_t_7.memview = NULL;
  __pyx_t_7.data = NULL;
+1372:     cclm.mus_make_fft_window_with_window(<cclm.mus_fft_window_t>window_type, size, beta, alpha, &win_view[0])
  __pyx_t_8 = __Pyx_PyInt_As_mus_long_t(__pyx_v_size); if (unlikely((__pyx_t_8 == ((mus_long_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 1372, __pyx_L1_error)
  __pyx_t_9 = __pyx_PyFloat_AsDouble(__pyx_v_beta); if (unlikely((__pyx_t_9 == ((mus_float_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 1372, __pyx_L1_error)
  __pyx_t_10 = __pyx_PyFloat_AsDouble(__pyx_v_alpha); if (unlikely((__pyx_t_10 == ((mus_float_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 1372, __pyx_L1_error)
  __pyx_t_11 = 0;
  __pyx_t_6 = -1;
  if (__pyx_t_11 < 0) {
    __pyx_t_11 += __pyx_v_win_view.shape[0];
    if (unlikely(__pyx_t_11 < 0)) __pyx_t_6 = 0;
  } else if (unlikely(__pyx_t_11 >= __pyx_v_win_view.shape[0])) __pyx_t_6 = 0;
  if (unlikely(__pyx_t_6 != -1)) {
    __Pyx_RaiseBufferIndexError(__pyx_t_6);
    __PYX_ERR(0, 1372, __pyx_L1_error)
  }
  (void)(mus_make_fft_window_with_window(((mus_fft_window_t)__pyx_v_window_type), __pyx_t_8, __pyx_t_9, __pyx_t_10, (&(*((double *) ( /* dim=0 */ (__pyx_v_win_view.data + __pyx_t_11 * __pyx_v_win_view.strides[0]) ))))));
+1373:     return win
  __Pyx_XDECREF((PyObject *)__pyx_r);
  if (!(likely(((__pyx_v_win) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_win, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1373, __pyx_L1_error)
  __Pyx_INCREF(__pyx_v_win);
  __pyx_r = ((PyArrayObject *)__pyx_v_win);
  goto __pyx_L0;
 1374: 
+1375: cpdef np.ndarray rectangular2polar(rdat: npt.NDArray[np.float64], idat: npt.NDArray[np.float64]):
static PyObject *__pyx_pw_8pysndlib_3clm_121rectangular2polar(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyArrayObject *__pyx_f_8pysndlib_3clm_rectangular2polar(PyObject *__pyx_v_rdat, PyObject *__pyx_v_idat, CYTHON_UNUSED int __pyx_skip_dispatch) {
  Py_ssize_t __pyx_v_size;
  __Pyx_memviewslice __pyx_v_rdat_view = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_idat_view = { 0, 0, { 0 }, { 0 }, { 0 } };
  CYTHON_UNUSED PyObject *__pyx_v_res = NULL;
  PyArrayObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("rectangular2polar", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __PYX_XCLEAR_MEMVIEW(&__pyx_t_6, 1);
  __Pyx_AddTraceback("pysndlib.clm.rectangular2polar", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __PYX_XCLEAR_MEMVIEW(&__pyx_v_rdat_view, 1);
  __PYX_XCLEAR_MEMVIEW(&__pyx_v_idat_view, 1);
  __Pyx_XDECREF(__pyx_v_res);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_121rectangular2polar(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_120rectangular2polar, "\n    convert real/imaginary data in s rl and im from rectangular form (fft output) to polar form (a\n    spectrum).\n    \n    :param rdat: real data\n    :param imaginary:  imaginary data\n    :return: magnitude written into rdat, idat contains phases\n    :rtype: np.ndarray\n    \n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_121rectangular2polar = {"rectangular2polar", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_121rectangular2polar, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_120rectangular2polar};
static PyObject *__pyx_pw_8pysndlib_3clm_121rectangular2polar(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_rdat = 0;
  PyObject *__pyx_v_idat = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("rectangular2polar (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_rdat,&__pyx_n_s_idat,0};
    PyObject* values[2] = {0,0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_rdat)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1375, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_idat)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1375, __pyx_L3_error)
        else {
          __Pyx_RaiseArgtupleInvalid("rectangular2polar", 1, 2, 2, 1); __PYX_ERR(0, 1375, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "rectangular2polar") < 0)) __PYX_ERR(0, 1375, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 2)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
      values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
    }
    __pyx_v_rdat = values[0];
    __pyx_v_idat = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("rectangular2polar", 1, 2, 2, __pyx_nargs); __PYX_ERR(0, 1375, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.rectangular2polar", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pysndlib_3clm_120rectangular2polar(__pyx_self, __pyx_v_rdat, __pyx_v_idat);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_120rectangular2polar(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_rdat, PyObject *__pyx_v_idat) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("rectangular2polar", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = ((PyObject *)__pyx_f_8pysndlib_3clm_rectangular2polar(__pyx_v_rdat, __pyx_v_idat, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1375, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pysndlib.clm.rectangular2polar", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__205 = PyTuple_Pack(2, __pyx_n_s_rdat, __pyx_n_s_idat); if (unlikely(!__pyx_tuple__205)) __PYX_ERR(0, 1375, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__205);
  __Pyx_GIVEREF(__pyx_tuple__205);
/* … */
  __pyx_t_37 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 1375, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  if (PyDict_SetItem(__pyx_t_37, __pyx_n_s_rdat, __pyx_kp_s_npt_NDArray_np_float64) < 0) __PYX_ERR(0, 1375, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_37, __pyx_n_s_idat, __pyx_kp_s_npt_NDArray_np_float64) < 0) __PYX_ERR(0, 1375, __pyx_L1_error)
  __pyx_t_40 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_121rectangular2polar, 0, __pyx_n_s_rectangular2polar, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__206)); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 1375, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_40, __pyx_t_37);
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_rectangular2polar, __pyx_t_40) < 0) __PYX_ERR(0, 1375, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
  __pyx_codeobj__206 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__205, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_rectangular2polar, 1375, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__206)) __PYX_ERR(0, 1375, __pyx_L1_error)
 1376:     """
 1377:     convert real/imaginary data in s rl and im from rectangular form (fft output) to polar form (a
 1378:     spectrum).
 1379:     
 1380:     :param rdat: real data
 1381:     :param imaginary:  imaginary data
 1382:     :return: magnitude written into rdat, idat contains phases
 1383:     :rtype: np.ndarray
 1384:     
 1385:     """
+1386:     size = len(rdat)
  __pyx_t_1 = PyObject_Length(__pyx_v_rdat); if (unlikely(__pyx_t_1 == ((Py_ssize_t)-1))) __PYX_ERR(0, 1386, __pyx_L1_error)
  __pyx_v_size = __pyx_t_1;
 1387: 
+1388:     check_ndim(rdat)
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_check_ndim); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1388, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = NULL;
  __pyx_t_5 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3);
    if (likely(__pyx_t_4)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_4);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_3, function);
      __pyx_t_5 = 1;
    }
  }
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_v_rdat};
    __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_5, 1+__pyx_t_5);
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1388, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+1389:     check_ndim(idat)
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_check_ndim); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1389, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = NULL;
  __pyx_t_5 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3);
    if (likely(__pyx_t_4)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_4);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_3, function);
      __pyx_t_5 = 1;
    }
  }
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_v_idat};
    __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_5, 1+__pyx_t_5);
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1389, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+1390:     compare_shapes(rdat, idat)
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_compare_shapes); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1390, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = NULL;
  __pyx_t_5 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3);
    if (likely(__pyx_t_4)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_4);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_3, function);
      __pyx_t_5 = 1;
    }
  }
  {
    PyObject *__pyx_callargs[3] = {__pyx_t_4, __pyx_v_rdat, __pyx_v_idat};
    __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_5, 2+__pyx_t_5);
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1390, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 1391: 
+1392:     cdef double [:] rdat_view = rdat
  __pyx_t_6 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_rdat, PyBUF_WRITABLE); if (unlikely(!__pyx_t_6.memview)) __PYX_ERR(0, 1392, __pyx_L1_error)
  __pyx_v_rdat_view = __pyx_t_6;
  __pyx_t_6.memview = NULL;
  __pyx_t_6.data = NULL;
+1393:     cdef double [:] idat_view = idat
  __pyx_t_6 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_idat, PyBUF_WRITABLE); if (unlikely(!__pyx_t_6.memview)) __PYX_ERR(0, 1393, __pyx_L1_error)
  __pyx_v_idat_view = __pyx_t_6;
  __pyx_t_6.memview = NULL;
  __pyx_t_6.data = NULL;
+1394:     res = cclm.mus_rectangular_to_polar(&rdat_view[0], &idat_view[0], size)
  __pyx_t_7 = 0;
  __pyx_t_5 = -1;
  if (__pyx_t_7 < 0) {
    __pyx_t_7 += __pyx_v_rdat_view.shape[0];
    if (unlikely(__pyx_t_7 < 0)) __pyx_t_5 = 0;
  } else if (unlikely(__pyx_t_7 >= __pyx_v_rdat_view.shape[0])) __pyx_t_5 = 0;
  if (unlikely(__pyx_t_5 != -1)) {
    __Pyx_RaiseBufferIndexError(__pyx_t_5);
    __PYX_ERR(0, 1394, __pyx_L1_error)
  }
  __pyx_t_8 = 0;
  __pyx_t_5 = -1;
  if (__pyx_t_8 < 0) {
    __pyx_t_8 += __pyx_v_idat_view.shape[0];
    if (unlikely(__pyx_t_8 < 0)) __pyx_t_5 = 0;
  } else if (unlikely(__pyx_t_8 >= __pyx_v_idat_view.shape[0])) __pyx_t_5 = 0;
  if (unlikely(__pyx_t_5 != -1)) {
    __Pyx_RaiseBufferIndexError(__pyx_t_5);
    __PYX_ERR(0, 1394, __pyx_L1_error)
  }
  __pyx_t_2 = __Pyx_void_to_None(mus_rectangular_to_polar((&(*((double *) ( /* dim=0 */ (__pyx_v_rdat_view.data + __pyx_t_7 * __pyx_v_rdat_view.strides[0]) )))), (&(*((double *) ( /* dim=0 */ (__pyx_v_idat_view.data + __pyx_t_8 * __pyx_v_idat_view.strides[0]) )))), __pyx_v_size)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1394, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_v_res = __pyx_t_2;
  __pyx_t_2 = 0;
+1395:     return rdat
  __Pyx_XDECREF((PyObject *)__pyx_r);
  if (!(likely(((__pyx_v_rdat) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_rdat, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1395, __pyx_L1_error)
  __Pyx_INCREF(__pyx_v_rdat);
  __pyx_r = ((PyArrayObject *)__pyx_v_rdat);
  goto __pyx_L0;
 1396: 
+1397: cpdef np.ndarray rectangular2magnitudes(rdat: npt.NDArray[np.float64], idat: npt.NDArray[np.float64]):
static PyObject *__pyx_pw_8pysndlib_3clm_123rectangular2magnitudes(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyArrayObject *__pyx_f_8pysndlib_3clm_rectangular2magnitudes(PyObject *__pyx_v_rdat, PyObject *__pyx_v_idat, CYTHON_UNUSED int __pyx_skip_dispatch) {
  Py_ssize_t __pyx_v_size;
  __Pyx_memviewslice __pyx_v_rdat_view = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_idat_view = { 0, 0, { 0 }, { 0 }, { 0 } };
  PyArrayObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("rectangular2magnitudes", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __PYX_XCLEAR_MEMVIEW(&__pyx_t_2, 1);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("pysndlib.clm.rectangular2magnitudes", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __PYX_XCLEAR_MEMVIEW(&__pyx_v_rdat_view, 1);
  __PYX_XCLEAR_MEMVIEW(&__pyx_v_idat_view, 1);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_123rectangular2magnitudes(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_122rectangular2magnitudes, "\n    convert real/imaginary data in rl and im from rectangular form (fft output) to polar form, but\n    ignore the phases.\n    \n    :param rdat: real data\n    :param imaginary:  imaginary data\n    :return: magnitude written into rdat\n    :rtype: np.ndarray\n    \n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_123rectangular2magnitudes = {"rectangular2magnitudes", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_123rectangular2magnitudes, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_122rectangular2magnitudes};
static PyObject *__pyx_pw_8pysndlib_3clm_123rectangular2magnitudes(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_rdat = 0;
  PyObject *__pyx_v_idat = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("rectangular2magnitudes (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_rdat,&__pyx_n_s_idat,0};
    PyObject* values[2] = {0,0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_rdat)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1397, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_idat)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1397, __pyx_L3_error)
        else {
          __Pyx_RaiseArgtupleInvalid("rectangular2magnitudes", 1, 2, 2, 1); __PYX_ERR(0, 1397, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "rectangular2magnitudes") < 0)) __PYX_ERR(0, 1397, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 2)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
      values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
    }
    __pyx_v_rdat = values[0];
    __pyx_v_idat = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("rectangular2magnitudes", 1, 2, 2, __pyx_nargs); __PYX_ERR(0, 1397, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.rectangular2magnitudes", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pysndlib_3clm_122rectangular2magnitudes(__pyx_self, __pyx_v_rdat, __pyx_v_idat);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_122rectangular2magnitudes(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_rdat, PyObject *__pyx_v_idat) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("rectangular2magnitudes", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = ((PyObject *)__pyx_f_8pysndlib_3clm_rectangular2magnitudes(__pyx_v_rdat, __pyx_v_idat, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1397, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pysndlib.clm.rectangular2magnitudes", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_40 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 1397, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  if (PyDict_SetItem(__pyx_t_40, __pyx_n_s_rdat, __pyx_kp_s_npt_NDArray_np_float64) < 0) __PYX_ERR(0, 1397, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_40, __pyx_n_s_idat, __pyx_kp_s_npt_NDArray_np_float64) < 0) __PYX_ERR(0, 1397, __pyx_L1_error)
  __pyx_t_37 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_123rectangular2magnitudes, 0, __pyx_n_s_rectangular2magnitudes, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__207)); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 1397, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_37, __pyx_t_40);
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_rectangular2magnitudes, __pyx_t_37) < 0) __PYX_ERR(0, 1397, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
/* … */
  __pyx_codeobj__207 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__205, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_rectangular2magnitudes, 1397, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__207)) __PYX_ERR(0, 1397, __pyx_L1_error)
 1398:     """
 1399:     convert real/imaginary data in rl and im from rectangular form (fft output) to polar form, but
 1400:     ignore the phases.
 1401:     
 1402:     :param rdat: real data
 1403:     :param imaginary:  imaginary data
 1404:     :return: magnitude written into rdat
 1405:     :rtype: np.ndarray
 1406:     
 1407:     """
+1408:     size = len(rdat)
  __pyx_t_1 = PyObject_Length(__pyx_v_rdat); if (unlikely(__pyx_t_1 == ((Py_ssize_t)-1))) __PYX_ERR(0, 1408, __pyx_L1_error)
  __pyx_v_size = __pyx_t_1;
+1409:     cdef double [:] rdat_view = rdat
  __pyx_t_2 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_rdat, PyBUF_WRITABLE); if (unlikely(!__pyx_t_2.memview)) __PYX_ERR(0, 1409, __pyx_L1_error)
  __pyx_v_rdat_view = __pyx_t_2;
  __pyx_t_2.memview = NULL;
  __pyx_t_2.data = NULL;
+1410:     cdef double [:] idat_view = idat
  __pyx_t_2 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_idat, PyBUF_WRITABLE); if (unlikely(!__pyx_t_2.memview)) __PYX_ERR(0, 1410, __pyx_L1_error)
  __pyx_v_idat_view = __pyx_t_2;
  __pyx_t_2.memview = NULL;
  __pyx_t_2.data = NULL;
+1411:     compare_shapes(rdat, idat)
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_compare_shapes); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1411, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = NULL;
  __pyx_t_6 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) {
    __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4);
    if (likely(__pyx_t_5)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
      __Pyx_INCREF(__pyx_t_5);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_4, function);
      __pyx_t_6 = 1;
    }
  }
  {
    PyObject *__pyx_callargs[3] = {__pyx_t_5, __pyx_v_rdat, __pyx_v_idat};
    __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_6, 2+__pyx_t_6);
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1411, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  }
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 1412: 
+1413:     cclm.mus_rectangular_to_magnitudes(&rdat_view[0], &idat_view[0], size)
  __pyx_t_7 = 0;
  __pyx_t_6 = -1;
  if (__pyx_t_7 < 0) {
    __pyx_t_7 += __pyx_v_rdat_view.shape[0];
    if (unlikely(__pyx_t_7 < 0)) __pyx_t_6 = 0;
  } else if (unlikely(__pyx_t_7 >= __pyx_v_rdat_view.shape[0])) __pyx_t_6 = 0;
  if (unlikely(__pyx_t_6 != -1)) {
    __Pyx_RaiseBufferIndexError(__pyx_t_6);
    __PYX_ERR(0, 1413, __pyx_L1_error)
  }
  __pyx_t_8 = 0;
  __pyx_t_6 = -1;
  if (__pyx_t_8 < 0) {
    __pyx_t_8 += __pyx_v_idat_view.shape[0];
    if (unlikely(__pyx_t_8 < 0)) __pyx_t_6 = 0;
  } else if (unlikely(__pyx_t_8 >= __pyx_v_idat_view.shape[0])) __pyx_t_6 = 0;
  if (unlikely(__pyx_t_6 != -1)) {
    __Pyx_RaiseBufferIndexError(__pyx_t_6);
    __PYX_ERR(0, 1413, __pyx_L1_error)
  }
  mus_rectangular_to_magnitudes((&(*((double *) ( /* dim=0 */ (__pyx_v_rdat_view.data + __pyx_t_7 * __pyx_v_rdat_view.strides[0]) )))), (&(*((double *) ( /* dim=0 */ (__pyx_v_idat_view.data + __pyx_t_8 * __pyx_v_idat_view.strides[0]) )))), __pyx_v_size);
+1414:     return rdat
  __Pyx_XDECREF((PyObject *)__pyx_r);
  if (!(likely(((__pyx_v_rdat) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_rdat, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1414, __pyx_L1_error)
  __Pyx_INCREF(__pyx_v_rdat);
  __pyx_r = ((PyArrayObject *)__pyx_v_rdat);
  goto __pyx_L0;
 1415: 
+1416: cpdef np.ndarray polar2rectangular(rdat: npt.NDArray[np.float64], idat: npt.NDArray[np.float64]):
static PyObject *__pyx_pw_8pysndlib_3clm_125polar2rectangular(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyArrayObject *__pyx_f_8pysndlib_3clm_polar2rectangular(PyObject *__pyx_v_rdat, PyObject *__pyx_v_idat, CYTHON_UNUSED int __pyx_skip_dispatch) {
  Py_ssize_t __pyx_v_size;
  __Pyx_memviewslice __pyx_v_rdat_view = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_idat_view = { 0, 0, { 0 }, { 0 }, { 0 } };
  PyArrayObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("polar2rectangular", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __PYX_XCLEAR_MEMVIEW(&__pyx_t_2, 1);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("pysndlib.clm.polar2rectangular", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __PYX_XCLEAR_MEMVIEW(&__pyx_v_rdat_view, 1);
  __PYX_XCLEAR_MEMVIEW(&__pyx_v_idat_view, 1);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_125polar2rectangular(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_124polar2rectangular, "\n    convert real/imaginary data in rl and im from polar (spectrum) to rectangular (fft).\n    \n    :param rdat: magnitude data\n    :param imaginary: phases data\n    :return: real data written into rdat, idat contains imaginary\n    :rtype: np.ndarray\n    \n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_125polar2rectangular = {"polar2rectangular", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_125polar2rectangular, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_124polar2rectangular};
static PyObject *__pyx_pw_8pysndlib_3clm_125polar2rectangular(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_rdat = 0;
  PyObject *__pyx_v_idat = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("polar2rectangular (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_rdat,&__pyx_n_s_idat,0};
    PyObject* values[2] = {0,0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_rdat)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1416, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_idat)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1416, __pyx_L3_error)
        else {
          __Pyx_RaiseArgtupleInvalid("polar2rectangular", 1, 2, 2, 1); __PYX_ERR(0, 1416, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "polar2rectangular") < 0)) __PYX_ERR(0, 1416, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 2)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
      values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
    }
    __pyx_v_rdat = values[0];
    __pyx_v_idat = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("polar2rectangular", 1, 2, 2, __pyx_nargs); __PYX_ERR(0, 1416, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.polar2rectangular", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pysndlib_3clm_124polar2rectangular(__pyx_self, __pyx_v_rdat, __pyx_v_idat);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_124polar2rectangular(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_rdat, PyObject *__pyx_v_idat) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("polar2rectangular", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = ((PyObject *)__pyx_f_8pysndlib_3clm_polar2rectangular(__pyx_v_rdat, __pyx_v_idat, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1416, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pysndlib.clm.polar2rectangular", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_37 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 1416, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  if (PyDict_SetItem(__pyx_t_37, __pyx_n_s_rdat, __pyx_kp_s_npt_NDArray_np_float64) < 0) __PYX_ERR(0, 1416, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_37, __pyx_n_s_idat, __pyx_kp_s_npt_NDArray_np_float64) < 0) __PYX_ERR(0, 1416, __pyx_L1_error)
  __pyx_t_40 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_125polar2rectangular, 0, __pyx_n_s_polar2rectangular, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__208)); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 1416, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_40, __pyx_t_37);
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_polar2rectangular, __pyx_t_40) < 0) __PYX_ERR(0, 1416, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
/* … */
  __pyx_codeobj__208 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__205, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_polar2rectangular, 1416, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__208)) __PYX_ERR(0, 1416, __pyx_L1_error)
 1417:     """
 1418:     convert real/imaginary data in rl and im from polar (spectrum) to rectangular (fft).
 1419:     
 1420:     :param rdat: magnitude data
 1421:     :param imaginary: phases data
 1422:     :return: real data written into rdat, idat contains imaginary
 1423:     :rtype: np.ndarray
 1424:     
 1425:     """
+1426:     size = len(rdat)
  __pyx_t_1 = PyObject_Length(__pyx_v_rdat); if (unlikely(__pyx_t_1 == ((Py_ssize_t)-1))) __PYX_ERR(0, 1426, __pyx_L1_error)
  __pyx_v_size = __pyx_t_1;
+1427:     cdef double [:] rdat_view = rdat
  __pyx_t_2 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_rdat, PyBUF_WRITABLE); if (unlikely(!__pyx_t_2.memview)) __PYX_ERR(0, 1427, __pyx_L1_error)
  __pyx_v_rdat_view = __pyx_t_2;
  __pyx_t_2.memview = NULL;
  __pyx_t_2.data = NULL;
+1428:     cdef double [:] idat_view = idat
  __pyx_t_2 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_idat, PyBUF_WRITABLE); if (unlikely(!__pyx_t_2.memview)) __PYX_ERR(0, 1428, __pyx_L1_error)
  __pyx_v_idat_view = __pyx_t_2;
  __pyx_t_2.memview = NULL;
  __pyx_t_2.data = NULL;
+1429:     compare_shapes(rdat, idat)
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_compare_shapes); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1429, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = NULL;
  __pyx_t_6 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) {
    __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4);
    if (likely(__pyx_t_5)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
      __Pyx_INCREF(__pyx_t_5);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_4, function);
      __pyx_t_6 = 1;
    }
  }
  {
    PyObject *__pyx_callargs[3] = {__pyx_t_5, __pyx_v_rdat, __pyx_v_idat};
    __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_6, 2+__pyx_t_6);
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1429, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  }
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 1430: 
+1431:     cclm.mus_polar_to_rectangular(&rdat_view[0], &idat_view[0], size)
  __pyx_t_7 = 0;
  __pyx_t_6 = -1;
  if (__pyx_t_7 < 0) {
    __pyx_t_7 += __pyx_v_rdat_view.shape[0];
    if (unlikely(__pyx_t_7 < 0)) __pyx_t_6 = 0;
  } else if (unlikely(__pyx_t_7 >= __pyx_v_rdat_view.shape[0])) __pyx_t_6 = 0;
  if (unlikely(__pyx_t_6 != -1)) {
    __Pyx_RaiseBufferIndexError(__pyx_t_6);
    __PYX_ERR(0, 1431, __pyx_L1_error)
  }
  __pyx_t_8 = 0;
  __pyx_t_6 = -1;
  if (__pyx_t_8 < 0) {
    __pyx_t_8 += __pyx_v_idat_view.shape[0];
    if (unlikely(__pyx_t_8 < 0)) __pyx_t_6 = 0;
  } else if (unlikely(__pyx_t_8 >= __pyx_v_idat_view.shape[0])) __pyx_t_6 = 0;
  if (unlikely(__pyx_t_6 != -1)) {
    __Pyx_RaiseBufferIndexError(__pyx_t_6);
    __PYX_ERR(0, 1431, __pyx_L1_error)
  }
  mus_polar_to_rectangular((&(*((double *) ( /* dim=0 */ (__pyx_v_rdat_view.data + __pyx_t_7 * __pyx_v_rdat_view.strides[0]) )))), (&(*((double *) ( /* dim=0 */ (__pyx_v_idat_view.data + __pyx_t_8 * __pyx_v_idat_view.strides[0]) )))), __pyx_v_size);
+1432:     return rdat
  __Pyx_XDECREF((PyObject *)__pyx_r);
  if (!(likely(((__pyx_v_rdat) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_rdat, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1432, __pyx_L1_error)
  __Pyx_INCREF(__pyx_v_rdat);
  __pyx_r = ((PyArrayObject *)__pyx_v_rdat);
  goto __pyx_L0;
 1433: 
+1434: cpdef np.ndarray spectrum(rdat: npt.NDArray[np.float64], idat: npt.NDArray[np.float64], window: npt.NDArray[np.cython.double64], norm_type: Spectrum):
static PyObject *__pyx_pw_8pysndlib_3clm_127spectrum(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyArrayObject *__pyx_f_8pysndlib_3clm_spectrum(PyObject *__pyx_v_rdat, PyObject *__pyx_v_idat, PyObject *__pyx_v_window, enum __pyx_t_8pysndlib_3clm_Spectrum __pyx_v_norm_type, CYTHON_UNUSED int __pyx_skip_dispatch) {
  Py_ssize_t __pyx_v_size;
  __Pyx_memviewslice __pyx_v_rdat_view = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_idat_view = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_window_view = { 0, 0, { 0 }, { 0 }, { 0 } };
  PyArrayObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("spectrum", 0);
  __Pyx_INCREF(__pyx_v_window);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __PYX_XCLEAR_MEMVIEW(&__pyx_t_8, 1);
  __Pyx_AddTraceback("pysndlib.clm.spectrum", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __PYX_XCLEAR_MEMVIEW(&__pyx_v_rdat_view, 1);
  __PYX_XCLEAR_MEMVIEW(&__pyx_v_idat_view, 1);
  __PYX_XCLEAR_MEMVIEW(&__pyx_v_window_view, 1);
  __Pyx_XDECREF(__pyx_v_window);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_127spectrum(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_126spectrum, "\n    real and imaginary data in ndarrays rl and im, returns (in rl) the spectrum thereof; window is the\n    fft data window (a ndarray as returned by make_fft_window  and type determines how the spectral data is\n    scaled:\n    spectrum.in_db= data in db,\n    spectrum.normalized (default) = linear and normalized\n    spectrum.raw = linear and un-normalized.\n    \n    :param rdat: real data\n    :param imaginary: imaginary data\n    :param window: fft window\n    :param norm_type: normalization type\n    :return: spectrum\n    :rtype: np.ndarray\n              \n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_127spectrum = {"spectrum", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_127spectrum, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_126spectrum};
static PyObject *__pyx_pw_8pysndlib_3clm_127spectrum(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_rdat = 0;
  PyObject *__pyx_v_idat = 0;
  PyObject *__pyx_v_window = 0;
  enum __pyx_t_8pysndlib_3clm_Spectrum __pyx_v_norm_type;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("spectrum (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_rdat,&__pyx_n_s_idat,&__pyx_n_s_window,&__pyx_n_s_norm_type,0};
    PyObject* values[4] = {0,0,0,0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  4: values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_rdat)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1434, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_idat)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1434, __pyx_L3_error)
        else {
          __Pyx_RaiseArgtupleInvalid("spectrum", 1, 4, 4, 1); __PYX_ERR(0, 1434, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_window)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1434, __pyx_L3_error)
        else {
          __Pyx_RaiseArgtupleInvalid("spectrum", 1, 4, 4, 2); __PYX_ERR(0, 1434, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (likely((values[3] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_norm_type)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1434, __pyx_L3_error)
        else {
          __Pyx_RaiseArgtupleInvalid("spectrum", 1, 4, 4, 3); __PYX_ERR(0, 1434, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "spectrum") < 0)) __PYX_ERR(0, 1434, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 4)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
      values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
      values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
      values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3);
    }
    __pyx_v_rdat = values[0];
    __pyx_v_idat = values[1];
    __pyx_v_window = values[2];
    __pyx_v_norm_type = ((enum __pyx_t_8pysndlib_3clm_Spectrum)__Pyx_PyInt_As_enum____pyx_t_8pysndlib_3clm_Spectrum(values[3])); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1434, __pyx_L3_error)
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("spectrum", 1, 4, 4, __pyx_nargs); __PYX_ERR(0, 1434, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.spectrum", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pysndlib_3clm_126spectrum(__pyx_self, __pyx_v_rdat, __pyx_v_idat, __pyx_v_window, __pyx_v_norm_type);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_126spectrum(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_rdat, PyObject *__pyx_v_idat, PyObject *__pyx_v_window, enum __pyx_t_8pysndlib_3clm_Spectrum __pyx_v_norm_type) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("spectrum", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = ((PyObject *)__pyx_f_8pysndlib_3clm_spectrum(__pyx_v_rdat, __pyx_v_idat, __pyx_v_window, __pyx_v_norm_type, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1434, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pysndlib.clm.spectrum", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__209 = PyTuple_Pack(4, __pyx_n_s_rdat, __pyx_n_s_idat, __pyx_n_s_window, __pyx_n_s_norm_type); if (unlikely(!__pyx_tuple__209)) __PYX_ERR(0, 1434, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__209);
  __Pyx_GIVEREF(__pyx_tuple__209);
/* … */
  __pyx_t_40 = __Pyx_PyDict_NewPresized(4); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 1434, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  if (PyDict_SetItem(__pyx_t_40, __pyx_n_s_rdat, __pyx_kp_s_npt_NDArray_np_float64) < 0) __PYX_ERR(0, 1434, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_40, __pyx_n_s_idat, __pyx_kp_s_npt_NDArray_np_float64) < 0) __PYX_ERR(0, 1434, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_40, __pyx_n_s_window, __pyx_kp_s_npt_NDArray_np_cython_double64) < 0) __PYX_ERR(0, 1434, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_40, __pyx_n_s_norm_type, __pyx_n_s_Spectrum) < 0) __PYX_ERR(0, 1434, __pyx_L1_error)
  __pyx_t_37 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_127spectrum, 0, __pyx_n_s_spectrum, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__210)); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 1434, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_37, __pyx_t_40);
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_spectrum, __pyx_t_37) < 0) __PYX_ERR(0, 1434, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
  __pyx_codeobj__210 = (PyObject*)__Pyx_PyCode_New(4, 0, 0, 4, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__209, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_spectrum, 1434, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__210)) __PYX_ERR(0, 1434, __pyx_L1_error)
 1435:     """
 1436:     real and imaginary data in ndarrays rl and im, returns (in rl) the spectrum thereof; window is the
 1437:     fft data window (a ndarray as returned by make_fft_window  and type determines how the spectral data is
 1438:     scaled:
 1439:     spectrum.in_db= data in db,
 1440:     spectrum.normalized (default) = linear and normalized
 1441:     spectrum.raw = linear and un-normalized.
 1442:     
 1443:     :param rdat: real data
 1444:     :param imaginary: imaginary data
 1445:     :param window: fft window
 1446:     :param norm_type: normalization type
 1447:     :return: spectrum
 1448:     :rtype: np.ndarray
 1449:               
 1450:     """
+1451:     if isinstance(window, list):
  __pyx_t_1 = PyList_Check(__pyx_v_window); 
  if (__pyx_t_1) {
/* … */
  }
+1452:         window = np.array(window, dtype=np.double)
    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1452, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_array); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1452, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1452, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_INCREF(__pyx_v_window);
    __Pyx_GIVEREF(__pyx_v_window);
    PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_window);
    __pyx_t_4 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1452, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_np); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1452, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_double); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1452, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_dtype, __pyx_t_6) < 0) __PYX_ERR(0, 1452, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_2, __pyx_t_4); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1452, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF_SET(__pyx_v_window, __pyx_t_6);
    __pyx_t_6 = 0;
+1453:     size = len(rdat)
  __pyx_t_7 = PyObject_Length(__pyx_v_rdat); if (unlikely(__pyx_t_7 == ((Py_ssize_t)-1))) __PYX_ERR(0, 1453, __pyx_L1_error)
  __pyx_v_size = __pyx_t_7;
+1454:     cdef double [:] rdat_view = rdat
  __pyx_t_8 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_rdat, PyBUF_WRITABLE); if (unlikely(!__pyx_t_8.memview)) __PYX_ERR(0, 1454, __pyx_L1_error)
  __pyx_v_rdat_view = __pyx_t_8;
  __pyx_t_8.memview = NULL;
  __pyx_t_8.data = NULL;
+1455:     cdef double [:] idat_view = idat
  __pyx_t_8 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_idat, PyBUF_WRITABLE); if (unlikely(!__pyx_t_8.memview)) __PYX_ERR(0, 1455, __pyx_L1_error)
  __pyx_v_idat_view = __pyx_t_8;
  __pyx_t_8.memview = NULL;
  __pyx_t_8.data = NULL;
+1456:     cdef double [:] window_view = window
  __pyx_t_8 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_window, PyBUF_WRITABLE); if (unlikely(!__pyx_t_8.memview)) __PYX_ERR(0, 1456, __pyx_L1_error)
  __pyx_v_window_view = __pyx_t_8;
  __pyx_t_8.memview = NULL;
  __pyx_t_8.data = NULL;
 1457: 
+1458:     check_ndim(rdat)
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_check_ndim); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1458, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_2 = NULL;
  __pyx_t_9 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_4);
    if (likely(__pyx_t_2)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
      __Pyx_INCREF(__pyx_t_2);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_4, function);
      __pyx_t_9 = 1;
    }
  }
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_v_rdat};
    __pyx_t_6 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_9, 1+__pyx_t_9);
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1458, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  }
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+1459:     check_ndim(idat)
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_check_ndim); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1459, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_2 = NULL;
  __pyx_t_9 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_4);
    if (likely(__pyx_t_2)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
      __Pyx_INCREF(__pyx_t_2);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_4, function);
      __pyx_t_9 = 1;
    }
  }
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_v_idat};
    __pyx_t_6 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_9, 1+__pyx_t_9);
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1459, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  }
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+1460:     check_ndim(window)
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_check_ndim); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1460, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_2 = NULL;
  __pyx_t_9 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_4);
    if (likely(__pyx_t_2)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
      __Pyx_INCREF(__pyx_t_2);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_4, function);
      __pyx_t_9 = 1;
    }
  }
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_v_window};
    __pyx_t_6 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_9, 1+__pyx_t_9);
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1460, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  }
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+1461:     compare_shapes(rdat, idat)
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_compare_shapes); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1461, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_2 = NULL;
  __pyx_t_9 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_4);
    if (likely(__pyx_t_2)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
      __Pyx_INCREF(__pyx_t_2);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_4, function);
      __pyx_t_9 = 1;
    }
  }
  {
    PyObject *__pyx_callargs[3] = {__pyx_t_2, __pyx_v_rdat, __pyx_v_idat};
    __pyx_t_6 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_9, 2+__pyx_t_9);
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1461, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  }
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
 1462: 
+1463:     cclm.mus_spectrum(&rdat_view[0], &idat_view[0], &window_view[0], size, <cclm.mus_spectrum_t>norm_type)
  __pyx_t_10 = 0;
  __pyx_t_9 = -1;
  if (__pyx_t_10 < 0) {
    __pyx_t_10 += __pyx_v_rdat_view.shape[0];
    if (unlikely(__pyx_t_10 < 0)) __pyx_t_9 = 0;
  } else if (unlikely(__pyx_t_10 >= __pyx_v_rdat_view.shape[0])) __pyx_t_9 = 0;
  if (unlikely(__pyx_t_9 != -1)) {
    __Pyx_RaiseBufferIndexError(__pyx_t_9);
    __PYX_ERR(0, 1463, __pyx_L1_error)
  }
  __pyx_t_11 = 0;
  __pyx_t_9 = -1;
  if (__pyx_t_11 < 0) {
    __pyx_t_11 += __pyx_v_idat_view.shape[0];
    if (unlikely(__pyx_t_11 < 0)) __pyx_t_9 = 0;
  } else if (unlikely(__pyx_t_11 >= __pyx_v_idat_view.shape[0])) __pyx_t_9 = 0;
  if (unlikely(__pyx_t_9 != -1)) {
    __Pyx_RaiseBufferIndexError(__pyx_t_9);
    __PYX_ERR(0, 1463, __pyx_L1_error)
  }
  __pyx_t_12 = 0;
  __pyx_t_9 = -1;
  if (__pyx_t_12 < 0) {
    __pyx_t_12 += __pyx_v_window_view.shape[0];
    if (unlikely(__pyx_t_12 < 0)) __pyx_t_9 = 0;
  } else if (unlikely(__pyx_t_12 >= __pyx_v_window_view.shape[0])) __pyx_t_9 = 0;
  if (unlikely(__pyx_t_9 != -1)) {
    __Pyx_RaiseBufferIndexError(__pyx_t_9);
    __PYX_ERR(0, 1463, __pyx_L1_error)
  }
  (void)(mus_spectrum((&(*((double *) ( /* dim=0 */ (__pyx_v_rdat_view.data + __pyx_t_10 * __pyx_v_rdat_view.strides[0]) )))), (&(*((double *) ( /* dim=0 */ (__pyx_v_idat_view.data + __pyx_t_11 * __pyx_v_idat_view.strides[0]) )))), (&(*((double *) ( /* dim=0 */ (__pyx_v_window_view.data + __pyx_t_12 * __pyx_v_window_view.strides[0]) )))), __pyx_v_size, ((mus_spectrum_t)__pyx_v_norm_type)));
+1464:     return rdat
  __Pyx_XDECREF((PyObject *)__pyx_r);
  if (!(likely(((__pyx_v_rdat) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_rdat, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1464, __pyx_L1_error)
  __Pyx_INCREF(__pyx_v_rdat);
  __pyx_r = ((PyArrayObject *)__pyx_v_rdat);
  goto __pyx_L0;
 1465: 
+1466: cpdef np.ndarray convolution(rl1: npt.NDArray[np.float64], rl2: npt.NDArray[np.float64], fft_size: int):
static PyObject *__pyx_pw_8pysndlib_3clm_129convolution(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyArrayObject *__pyx_f_8pysndlib_3clm_convolution(PyObject *__pyx_v_rl1, PyObject *__pyx_v_rl2, CYTHON_UNUSED PyObject *__pyx_v_fft_size, CYTHON_UNUSED int __pyx_skip_dispatch) {
  Py_ssize_t __pyx_v_size;
  __Pyx_memviewslice __pyx_v_rl1_view = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_rl2_view = { 0, 0, { 0 }, { 0 }, { 0 } };
  PyArrayObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("convolution", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __PYX_XCLEAR_MEMVIEW(&__pyx_t_2, 1);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("pysndlib.clm.convolution", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __PYX_XCLEAR_MEMVIEW(&__pyx_v_rl1_view, 1);
  __PYX_XCLEAR_MEMVIEW(&__pyx_v_rl2_view, 1);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_129convolution(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_128convolution, "\n    convolution of ndarrays v1 with v2, using fft of size len (a power of 2), result in v1.\n\n    :param rl1: input data 1\n    :param rl2: input  data 2\n    :param fft_size: fft size\n    :return: convolved output. also written into rl1\n    :rtype: np.ndarray\n    \n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_129convolution = {"convolution", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_129convolution, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_128convolution};
static PyObject *__pyx_pw_8pysndlib_3clm_129convolution(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_rl1 = 0;
  PyObject *__pyx_v_rl2 = 0;
  PyObject *__pyx_v_fft_size = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("convolution (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_rl1,&__pyx_n_s_rl2,&__pyx_n_s_fft_size,0};
    PyObject* values[3] = {0,0,0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_rl1)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1466, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_rl2)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1466, __pyx_L3_error)
        else {
          __Pyx_RaiseArgtupleInvalid("convolution", 1, 3, 3, 1); __PYX_ERR(0, 1466, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_fft_size)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1466, __pyx_L3_error)
        else {
          __Pyx_RaiseArgtupleInvalid("convolution", 1, 3, 3, 2); __PYX_ERR(0, 1466, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "convolution") < 0)) __PYX_ERR(0, 1466, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 3)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
      values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
      values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
    }
    __pyx_v_rl1 = values[0];
    __pyx_v_rl2 = values[1];
    __pyx_v_fft_size = ((PyObject*)values[2]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("convolution", 1, 3, 3, __pyx_nargs); __PYX_ERR(0, 1466, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.convolution", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_fft_size), (&PyInt_Type), 0, "fft_size", 1))) __PYX_ERR(0, 1466, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pysndlib_3clm_128convolution(__pyx_self, __pyx_v_rl1, __pyx_v_rl2, __pyx_v_fft_size);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_128convolution(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_rl1, PyObject *__pyx_v_rl2, PyObject *__pyx_v_fft_size) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("convolution", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = ((PyObject *)__pyx_f_8pysndlib_3clm_convolution(__pyx_v_rl1, __pyx_v_rl2, __pyx_v_fft_size, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1466, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pysndlib.clm.convolution", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__211 = PyTuple_Pack(3, __pyx_n_s_rl1, __pyx_n_s_rl2, __pyx_n_s_fft_size); if (unlikely(!__pyx_tuple__211)) __PYX_ERR(0, 1466, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__211);
  __Pyx_GIVEREF(__pyx_tuple__211);
/* … */
  __pyx_t_37 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 1466, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  if (PyDict_SetItem(__pyx_t_37, __pyx_n_s_rl1, __pyx_kp_s_npt_NDArray_np_float64) < 0) __PYX_ERR(0, 1466, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_37, __pyx_n_s_rl2, __pyx_kp_s_npt_NDArray_np_float64) < 0) __PYX_ERR(0, 1466, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_37, __pyx_n_s_fft_size, __pyx_n_s_int_2) < 0) __PYX_ERR(0, 1466, __pyx_L1_error)
  __pyx_t_40 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_129convolution, 0, __pyx_n_s_convolution, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__212)); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 1466, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_40, __pyx_t_37);
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_convolution, __pyx_t_40) < 0) __PYX_ERR(0, 1466, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
  __pyx_codeobj__212 = (PyObject*)__Pyx_PyCode_New(3, 0, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__211, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_convolution, 1466, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__212)) __PYX_ERR(0, 1466, __pyx_L1_error)
 1467:     """
 1468:     convolution of ndarrays v1 with v2, using fft of size len (a power of 2), result in v1.
 1469: 
 1470:     :param rl1: input data 1
 1471:     :param rl2: input  data 2
 1472:     :param fft_size: fft size
 1473:     :return: convolved output. also written into rl1
 1474:     :rtype: np.ndarray
 1475:     
 1476:     """
+1477:     size = len(rl1)
  __pyx_t_1 = PyObject_Length(__pyx_v_rl1); if (unlikely(__pyx_t_1 == ((Py_ssize_t)-1))) __PYX_ERR(0, 1477, __pyx_L1_error)
  __pyx_v_size = __pyx_t_1;
+1478:     cdef double [:] rl1_view = rl1
  __pyx_t_2 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_rl1, PyBUF_WRITABLE); if (unlikely(!__pyx_t_2.memview)) __PYX_ERR(0, 1478, __pyx_L1_error)
  __pyx_v_rl1_view = __pyx_t_2;
  __pyx_t_2.memview = NULL;
  __pyx_t_2.data = NULL;
+1479:     cdef double [:] rl2_view = rl2
  __pyx_t_2 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_rl2, PyBUF_WRITABLE); if (unlikely(!__pyx_t_2.memview)) __PYX_ERR(0, 1479, __pyx_L1_error)
  __pyx_v_rl2_view = __pyx_t_2;
  __pyx_t_2.memview = NULL;
  __pyx_t_2.data = NULL;
+1480:     check_ndim(rl1)
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_check_ndim); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1480, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = NULL;
  __pyx_t_6 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) {
    __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4);
    if (likely(__pyx_t_5)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
      __Pyx_INCREF(__pyx_t_5);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_4, function);
      __pyx_t_6 = 1;
    }
  }
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_v_rl1};
    __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_6, 1+__pyx_t_6);
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1480, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  }
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+1481:     check_ndim(rl2)
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_check_ndim); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1481, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = NULL;
  __pyx_t_6 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) {
    __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4);
    if (likely(__pyx_t_5)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
      __Pyx_INCREF(__pyx_t_5);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_4, function);
      __pyx_t_6 = 1;
    }
  }
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_v_rl2};
    __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_6, 1+__pyx_t_6);
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1481, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  }
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+1482:     compare_shapes(rl1, rl2)
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_compare_shapes); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1482, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = NULL;
  __pyx_t_6 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) {
    __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4);
    if (likely(__pyx_t_5)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
      __Pyx_INCREF(__pyx_t_5);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_4, function);
      __pyx_t_6 = 1;
    }
  }
  {
    PyObject *__pyx_callargs[3] = {__pyx_t_5, __pyx_v_rl1, __pyx_v_rl2};
    __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_6, 2+__pyx_t_6);
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1482, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  }
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 1483: 
+1484:     cclm.mus_convolution(&rl1_view[0], &rl2_view[0], size)
  __pyx_t_7 = 0;
  __pyx_t_6 = -1;
  if (__pyx_t_7 < 0) {
    __pyx_t_7 += __pyx_v_rl1_view.shape[0];
    if (unlikely(__pyx_t_7 < 0)) __pyx_t_6 = 0;
  } else if (unlikely(__pyx_t_7 >= __pyx_v_rl1_view.shape[0])) __pyx_t_6 = 0;
  if (unlikely(__pyx_t_6 != -1)) {
    __Pyx_RaiseBufferIndexError(__pyx_t_6);
    __PYX_ERR(0, 1484, __pyx_L1_error)
  }
  __pyx_t_8 = 0;
  __pyx_t_6 = -1;
  if (__pyx_t_8 < 0) {
    __pyx_t_8 += __pyx_v_rl2_view.shape[0];
    if (unlikely(__pyx_t_8 < 0)) __pyx_t_6 = 0;
  } else if (unlikely(__pyx_t_8 >= __pyx_v_rl2_view.shape[0])) __pyx_t_6 = 0;
  if (unlikely(__pyx_t_6 != -1)) {
    __Pyx_RaiseBufferIndexError(__pyx_t_6);
    __PYX_ERR(0, 1484, __pyx_L1_error)
  }
  (void)(mus_convolution((&(*((double *) ( /* dim=0 */ (__pyx_v_rl1_view.data + __pyx_t_7 * __pyx_v_rl1_view.strides[0]) )))), (&(*((double *) ( /* dim=0 */ (__pyx_v_rl2_view.data + __pyx_t_8 * __pyx_v_rl2_view.strides[0]) )))), __pyx_v_size));
+1485:     return rl1
  __Pyx_XDECREF((PyObject *)__pyx_r);
  if (!(likely(((__pyx_v_rl1) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_rl1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1485, __pyx_L1_error)
  __Pyx_INCREF(__pyx_v_rl1);
  __pyx_r = ((PyArrayObject *)__pyx_v_rl1);
  goto __pyx_L0;
 1486: 
+1487: cpdef np.ndarray autocorrelate(data: npt.NDArray[np.float64]):
static PyObject *__pyx_pw_8pysndlib_3clm_131autocorrelate(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyArrayObject *__pyx_f_8pysndlib_3clm_autocorrelate(PyObject *__pyx_v_data, CYTHON_UNUSED int __pyx_skip_dispatch) {
  Py_ssize_t __pyx_v_size;
  __Pyx_memviewslice __pyx_v_data_view = { 0, 0, { 0 }, { 0 }, { 0 } };
  PyArrayObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("autocorrelate", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __PYX_XCLEAR_MEMVIEW(&__pyx_t_6, 1);
  __Pyx_AddTraceback("pysndlib.clm.autocorrelate", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __PYX_XCLEAR_MEMVIEW(&__pyx_v_data_view, 1);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_131autocorrelate(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_130autocorrelate, "\n    in place autocorrelation of data (a ndarray).\n\n    :param data: data\n    :return: autocorrelation result\n    :rtype: np.ndarray\n\n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_131autocorrelate = {"autocorrelate", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_131autocorrelate, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_130autocorrelate};
static PyObject *__pyx_pw_8pysndlib_3clm_131autocorrelate(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_data = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("autocorrelate (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_data,0};
    PyObject* values[1] = {0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_data)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1487, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "autocorrelate") < 0)) __PYX_ERR(0, 1487, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
    }
    __pyx_v_data = values[0];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("autocorrelate", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 1487, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.autocorrelate", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pysndlib_3clm_130autocorrelate(__pyx_self, __pyx_v_data);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_130autocorrelate(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_data) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("autocorrelate", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = ((PyObject *)__pyx_f_8pysndlib_3clm_autocorrelate(__pyx_v_data, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1487, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pysndlib.clm.autocorrelate", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__213 = PyTuple_Pack(1, __pyx_n_s_data); if (unlikely(!__pyx_tuple__213)) __PYX_ERR(0, 1487, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__213);
  __Pyx_GIVEREF(__pyx_tuple__213);
/* … */
  __pyx_t_40 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 1487, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  if (PyDict_SetItem(__pyx_t_40, __pyx_n_s_data, __pyx_kp_s_npt_NDArray_np_float64) < 0) __PYX_ERR(0, 1487, __pyx_L1_error)
  __pyx_t_37 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_131autocorrelate, 0, __pyx_n_s_autocorrelate, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__214)); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 1487, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_37, __pyx_t_40);
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_autocorrelate, __pyx_t_37) < 0) __PYX_ERR(0, 1487, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
  __pyx_codeobj__214 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__213, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_autocorrelate, 1487, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__214)) __PYX_ERR(0, 1487, __pyx_L1_error)
 1488:     """
 1489:     in place autocorrelation of data (a ndarray).
 1490: 
 1491:     :param data: data
 1492:     :return: autocorrelation result
 1493:     :rtype: np.ndarray
 1494: 
 1495:     """
+1496:     size = len(data)
  __pyx_t_1 = PyObject_Length(__pyx_v_data); if (unlikely(__pyx_t_1 == ((Py_ssize_t)-1))) __PYX_ERR(0, 1496, __pyx_L1_error)
  __pyx_v_size = __pyx_t_1;
+1497:     check_ndim(data)
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_check_ndim); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1497, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = NULL;
  __pyx_t_5 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3);
    if (likely(__pyx_t_4)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_4);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_3, function);
      __pyx_t_5 = 1;
    }
  }
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_v_data};
    __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_5, 1+__pyx_t_5);
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1497, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 1498: 
+1499:     cdef double [:] data_view = data
  __pyx_t_6 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_data, PyBUF_WRITABLE); if (unlikely(!__pyx_t_6.memview)) __PYX_ERR(0, 1499, __pyx_L1_error)
  __pyx_v_data_view = __pyx_t_6;
  __pyx_t_6.memview = NULL;
  __pyx_t_6.data = NULL;
+1500:     cclm.mus_autocorrelate(&data_view[0], size)
  __pyx_t_7 = 0;
  __pyx_t_5 = -1;
  if (__pyx_t_7 < 0) {
    __pyx_t_7 += __pyx_v_data_view.shape[0];
    if (unlikely(__pyx_t_7 < 0)) __pyx_t_5 = 0;
  } else if (unlikely(__pyx_t_7 >= __pyx_v_data_view.shape[0])) __pyx_t_5 = 0;
  if (unlikely(__pyx_t_5 != -1)) {
    __Pyx_RaiseBufferIndexError(__pyx_t_5);
    __PYX_ERR(0, 1500, __pyx_L1_error)
  }
  (void)(mus_autocorrelate((&(*((double *) ( /* dim=0 */ (__pyx_v_data_view.data + __pyx_t_7 * __pyx_v_data_view.strides[0]) )))), __pyx_v_size));
+1501:     return data
  __Pyx_XDECREF((PyObject *)__pyx_r);
  if (!(likely(((__pyx_v_data) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_data, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1501, __pyx_L1_error)
  __Pyx_INCREF(__pyx_v_data);
  __pyx_r = ((PyArrayObject *)__pyx_v_data);
  goto __pyx_L0;
 1502: 
+1503: cpdef np.ndarray correlate(data1: npt.NDArray[np.float64], data2: npt.NDArray[np.float64]):
static PyObject *__pyx_pw_8pysndlib_3clm_133correlate(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyArrayObject *__pyx_f_8pysndlib_3clm_correlate(PyObject *__pyx_v_data1, PyObject *__pyx_v_data2, CYTHON_UNUSED int __pyx_skip_dispatch) {
  Py_ssize_t __pyx_v_size;
  __Pyx_memviewslice __pyx_v_data1_view = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_data2_view = { 0, 0, { 0 }, { 0 }, { 0 } };
  PyArrayObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("correlate", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __PYX_XCLEAR_MEMVIEW(&__pyx_t_6, 1);
  __Pyx_AddTraceback("pysndlib.clm.correlate", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __PYX_XCLEAR_MEMVIEW(&__pyx_v_data1_view, 1);
  __PYX_XCLEAR_MEMVIEW(&__pyx_v_data2_view, 1);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_133correlate(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_132correlate, "\n    in place cross-correlation of data1 and data2 (both ndarrays).\n    \n    :param data1: data 1\n    :param data2: data 2\n    :return: correlation result written into data1\n    :rtype: np.ndarray\n    \n    \n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_133correlate = {"correlate", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_133correlate, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_132correlate};
static PyObject *__pyx_pw_8pysndlib_3clm_133correlate(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_data1 = 0;
  PyObject *__pyx_v_data2 = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("correlate (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_data1,&__pyx_n_s_data2,0};
    PyObject* values[2] = {0,0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_data1)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1503, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_data2)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1503, __pyx_L3_error)
        else {
          __Pyx_RaiseArgtupleInvalid("correlate", 1, 2, 2, 1); __PYX_ERR(0, 1503, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "correlate") < 0)) __PYX_ERR(0, 1503, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 2)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
      values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
    }
    __pyx_v_data1 = values[0];
    __pyx_v_data2 = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("correlate", 1, 2, 2, __pyx_nargs); __PYX_ERR(0, 1503, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.correlate", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pysndlib_3clm_132correlate(__pyx_self, __pyx_v_data1, __pyx_v_data2);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_132correlate(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_data1, PyObject *__pyx_v_data2) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("correlate", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = ((PyObject *)__pyx_f_8pysndlib_3clm_correlate(__pyx_v_data1, __pyx_v_data2, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1503, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pysndlib.clm.correlate", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_37 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 1503, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  if (PyDict_SetItem(__pyx_t_37, __pyx_n_s_data1, __pyx_kp_s_npt_NDArray_np_float64) < 0) __PYX_ERR(0, 1503, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_37, __pyx_n_s_data2, __pyx_kp_s_npt_NDArray_np_float64) < 0) __PYX_ERR(0, 1503, __pyx_L1_error)
  __pyx_t_40 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_133correlate, 0, __pyx_n_s_correlate, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__215)); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 1503, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_40, __pyx_t_37);
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_correlate, __pyx_t_40) < 0) __PYX_ERR(0, 1503, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
/* … */
  __pyx_codeobj__215 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__190, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_correlate, 1503, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__215)) __PYX_ERR(0, 1503, __pyx_L1_error)
 1504:     """
 1505:     in place cross-correlation of data1 and data2 (both ndarrays).
 1506:     
 1507:     :param data1: data 1
 1508:     :param data2: data 2
 1509:     :return: correlation result written into data1
 1510:     :rtype: np.ndarray
 1511:     
 1512:     
 1513:     """
 1514: 
+1515:     size = len(data1)
  __pyx_t_1 = PyObject_Length(__pyx_v_data1); if (unlikely(__pyx_t_1 == ((Py_ssize_t)-1))) __PYX_ERR(0, 1515, __pyx_L1_error)
  __pyx_v_size = __pyx_t_1;
+1516:     check_ndim(data1)
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_check_ndim); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1516, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = NULL;
  __pyx_t_5 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3);
    if (likely(__pyx_t_4)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_4);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_3, function);
      __pyx_t_5 = 1;
    }
  }
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_v_data1};
    __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_5, 1+__pyx_t_5);
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1516, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+1517:     check_ndim(data2)
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_check_ndim); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1517, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = NULL;
  __pyx_t_5 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3);
    if (likely(__pyx_t_4)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_4);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_3, function);
      __pyx_t_5 = 1;
    }
  }
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_v_data2};
    __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_5, 1+__pyx_t_5);
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1517, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+1518:     compare_shapes(data1, data2)
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_compare_shapes); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1518, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = NULL;
  __pyx_t_5 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3);
    if (likely(__pyx_t_4)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_4);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_3, function);
      __pyx_t_5 = 1;
    }
  }
  {
    PyObject *__pyx_callargs[3] = {__pyx_t_4, __pyx_v_data1, __pyx_v_data2};
    __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_5, 2+__pyx_t_5);
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1518, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+1519:     cdef double [:] data1_view = data1
  __pyx_t_6 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_data1, PyBUF_WRITABLE); if (unlikely(!__pyx_t_6.memview)) __PYX_ERR(0, 1519, __pyx_L1_error)
  __pyx_v_data1_view = __pyx_t_6;
  __pyx_t_6.memview = NULL;
  __pyx_t_6.data = NULL;
+1520:     cdef double [:] data2_view = data2
  __pyx_t_6 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_data2, PyBUF_WRITABLE); if (unlikely(!__pyx_t_6.memview)) __PYX_ERR(0, 1520, __pyx_L1_error)
  __pyx_v_data2_view = __pyx_t_6;
  __pyx_t_6.memview = NULL;
  __pyx_t_6.data = NULL;
 1521: 
+1522:     cclm.mus_correlate(&data1_view[0], &data2_view[0], size)
  __pyx_t_7 = 0;
  __pyx_t_5 = -1;
  if (__pyx_t_7 < 0) {
    __pyx_t_7 += __pyx_v_data1_view.shape[0];
    if (unlikely(__pyx_t_7 < 0)) __pyx_t_5 = 0;
  } else if (unlikely(__pyx_t_7 >= __pyx_v_data1_view.shape[0])) __pyx_t_5 = 0;
  if (unlikely(__pyx_t_5 != -1)) {
    __Pyx_RaiseBufferIndexError(__pyx_t_5);
    __PYX_ERR(0, 1522, __pyx_L1_error)
  }
  __pyx_t_8 = 0;
  __pyx_t_5 = -1;
  if (__pyx_t_8 < 0) {
    __pyx_t_8 += __pyx_v_data2_view.shape[0];
    if (unlikely(__pyx_t_8 < 0)) __pyx_t_5 = 0;
  } else if (unlikely(__pyx_t_8 >= __pyx_v_data2_view.shape[0])) __pyx_t_5 = 0;
  if (unlikely(__pyx_t_5 != -1)) {
    __Pyx_RaiseBufferIndexError(__pyx_t_5);
    __PYX_ERR(0, 1522, __pyx_L1_error)
  }
  (void)(mus_correlate((&(*((double *) ( /* dim=0 */ (__pyx_v_data1_view.data + __pyx_t_7 * __pyx_v_data1_view.strides[0]) )))), (&(*((double *) ( /* dim=0 */ (__pyx_v_data2_view.data + __pyx_t_8 * __pyx_v_data2_view.strides[0]) )))), __pyx_v_size));
+1523:     return data1
  __Pyx_XDECREF((PyObject *)__pyx_r);
  if (!(likely(((__pyx_v_data1) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_data1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1523, __pyx_L1_error)
  __Pyx_INCREF(__pyx_v_data1);
  __pyx_r = ((PyArrayObject *)__pyx_v_data1);
  goto __pyx_L0;
 1524: 
+1525: cpdef np.ndarray cepstrum(data: npt.NDArray[np.float64]):
static PyObject *__pyx_pw_8pysndlib_3clm_135cepstrum(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyArrayObject *__pyx_f_8pysndlib_3clm_cepstrum(PyObject *__pyx_v_data, CYTHON_UNUSED int __pyx_skip_dispatch) {
  Py_ssize_t __pyx_v_size;
  __Pyx_memviewslice __pyx_v_data_view = { 0, 0, { 0 }, { 0 }, { 0 } };
  PyArrayObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("cepstrum", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __PYX_XCLEAR_MEMVIEW(&__pyx_t_6, 1);
  __Pyx_AddTraceback("pysndlib.clm.cepstrum", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __PYX_XCLEAR_MEMVIEW(&__pyx_v_data_view, 1);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_135cepstrum(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_134cepstrum, "\n    return cepstrum of signal\n    \n    :param data: samples to analyze\n    :return: cepstrum. also written into data\n    :rtype: np.ndarray\n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_135cepstrum = {"cepstrum", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_135cepstrum, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_134cepstrum};
static PyObject *__pyx_pw_8pysndlib_3clm_135cepstrum(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_data = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("cepstrum (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_data,0};
    PyObject* values[1] = {0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_data)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1525, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "cepstrum") < 0)) __PYX_ERR(0, 1525, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
    }
    __pyx_v_data = values[0];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("cepstrum", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 1525, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.cepstrum", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pysndlib_3clm_134cepstrum(__pyx_self, __pyx_v_data);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_134cepstrum(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_data) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("cepstrum", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = ((PyObject *)__pyx_f_8pysndlib_3clm_cepstrum(__pyx_v_data, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1525, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pysndlib.clm.cepstrum", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_40 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 1525, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  if (PyDict_SetItem(__pyx_t_40, __pyx_n_s_data, __pyx_kp_s_npt_NDArray_np_float64) < 0) __PYX_ERR(0, 1525, __pyx_L1_error)
  __pyx_t_37 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_135cepstrum, 0, __pyx_n_s_cepstrum, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__216)); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 1525, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_37, __pyx_t_40);
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_cepstrum, __pyx_t_37) < 0) __PYX_ERR(0, 1525, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
/* … */
  __pyx_codeobj__216 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__213, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_cepstrum, 1525, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__216)) __PYX_ERR(0, 1525, __pyx_L1_error)
 1526:     """
 1527:     return cepstrum of signal
 1528:     
 1529:     :param data: samples to analyze
 1530:     :return: cepstrum. also written into data
 1531:     :rtype: np.ndarray
 1532:     """
+1533:     size = len(data)
  __pyx_t_1 = PyObject_Length(__pyx_v_data); if (unlikely(__pyx_t_1 == ((Py_ssize_t)-1))) __PYX_ERR(0, 1533, __pyx_L1_error)
  __pyx_v_size = __pyx_t_1;
+1534:     check_ndim(data)
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_check_ndim); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1534, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = NULL;
  __pyx_t_5 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3);
    if (likely(__pyx_t_4)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_4);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_3, function);
      __pyx_t_5 = 1;
    }
  }
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_v_data};
    __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_5, 1+__pyx_t_5);
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1534, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+1535:     cdef double [:] data_view = data
  __pyx_t_6 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_data, PyBUF_WRITABLE); if (unlikely(!__pyx_t_6.memview)) __PYX_ERR(0, 1535, __pyx_L1_error)
  __pyx_v_data_view = __pyx_t_6;
  __pyx_t_6.memview = NULL;
  __pyx_t_6.data = NULL;
+1536:     cclm.mus_cepstrum(&data_view[0], size)
  __pyx_t_7 = 0;
  __pyx_t_5 = -1;
  if (__pyx_t_7 < 0) {
    __pyx_t_7 += __pyx_v_data_view.shape[0];
    if (unlikely(__pyx_t_7 < 0)) __pyx_t_5 = 0;
  } else if (unlikely(__pyx_t_7 >= __pyx_v_data_view.shape[0])) __pyx_t_5 = 0;
  if (unlikely(__pyx_t_5 != -1)) {
    __Pyx_RaiseBufferIndexError(__pyx_t_5);
    __PYX_ERR(0, 1536, __pyx_L1_error)
  }
  (void)(mus_cepstrum((&(*((double *) ( /* dim=0 */ (__pyx_v_data_view.data + __pyx_t_7 * __pyx_v_data_view.strides[0]) )))), __pyx_v_size));
+1537:     return data
  __Pyx_XDECREF((PyObject *)__pyx_r);
  if (!(likely(((__pyx_v_data) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_data, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1537, __pyx_L1_error)
  __Pyx_INCREF(__pyx_v_data);
  __pyx_r = ((PyArrayObject *)__pyx_v_data);
  goto __pyx_L0;
 1538: 
+1539: cpdef np.ndarray partials2wave(partials, wave: npt.NDArray[np.float64]=None, table_size: Optional[int]=None, norm: Optional[bool]=True ):
static PyObject *__pyx_pw_8pysndlib_3clm_137partials2wave(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyArrayObject *__pyx_f_8pysndlib_3clm_partials2wave(PyObject *__pyx_v_partials, CYTHON_UNUSED int __pyx_skip_dispatch, struct __pyx_opt_args_8pysndlib_3clm_partials2wave *__pyx_optional_args) {
  PyObject *__pyx_v_wave = ((PyObject *)Py_None);
  PyObject *__pyx_v_table_size = ((PyObject *)Py_None);
  PyObject *__pyx_v_norm = ((PyObject *)Py_True);
  __Pyx_memviewslice __pyx_v_wave_view = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_partials_view = { 0, 0, { 0 }, { 0 }, { 0 } };
  PyArrayObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("partials2wave", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_wave = __pyx_optional_args->wave;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_table_size = __pyx_optional_args->table_size;
        if (__pyx_optional_args->__pyx_n > 2) {
          __pyx_v_norm = __pyx_optional_args->norm;
        }
      }
    }
  }
  __Pyx_INCREF(__pyx_v_partials);
  __Pyx_INCREF(__pyx_v_wave);
  __Pyx_INCREF(__pyx_v_table_size);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __PYX_XCLEAR_MEMVIEW(&__pyx_t_10, 1);
  __Pyx_AddTraceback("pysndlib.clm.partials2wave", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __PYX_XCLEAR_MEMVIEW(&__pyx_v_wave_view, 1);
  __PYX_XCLEAR_MEMVIEW(&__pyx_v_partials_view, 1);
  __Pyx_XDECREF(__pyx_v_partials);
  __Pyx_XDECREF(__pyx_v_wave);
  __Pyx_XDECREF(__pyx_v_table_size);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_137partials2wave(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_136partials2wave, "\n    take a list or np.ndarray of partials (harmonic number and associated amplitude) and produce a\n    waveform for use in table_lookup.\n    \n    :param partials: list or np.ndarray of partials (harm and amp)\n    :param wave: array to write wave into. if not provided, one will be allocated\n    :param table_size: size of table\n    :param norm: whether to normalize partials\n    :return: array provided in wave or new array.\n    :rtype: np.ndarray\n    \n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_137partials2wave = {"partials2wave", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_137partials2wave, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_136partials2wave};
static PyObject *__pyx_pw_8pysndlib_3clm_137partials2wave(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_partials = 0;
  PyObject *__pyx_v_wave = 0;
  PyObject *__pyx_v_table_size = 0;
  PyObject *__pyx_v_norm = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("partials2wave (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_partials,&__pyx_n_s_wave,&__pyx_n_s_table_size,&__pyx_n_s_norm,0};
    PyObject* values[4] = {0,0,0,0};
    values[1] = ((PyObject *)Py_None);
    values[2] = ((PyObject *)Py_None);
    values[3] = ((PyObject *)Py_True);
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  4: values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_partials)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1539, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_wave);
          if (value) { values[1] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1539, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_table_size);
          if (value) { values[2] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1539, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_norm);
          if (value) { values[3] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1539, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "partials2wave") < 0)) __PYX_ERR(0, 1539, __pyx_L3_error)
      }
    } else {
      switch (__pyx_nargs) {
        case  4: values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_partials = values[0];
    __pyx_v_wave = values[1];
    __pyx_v_table_size = values[2];
    __pyx_v_norm = values[3];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("partials2wave", 0, 1, 4, __pyx_nargs); __PYX_ERR(0, 1539, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.partials2wave", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pysndlib_3clm_136partials2wave(__pyx_self, __pyx_v_partials, __pyx_v_wave, __pyx_v_table_size, __pyx_v_norm);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_136partials2wave(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_partials, PyObject *__pyx_v_wave, PyObject *__pyx_v_table_size, PyObject *__pyx_v_norm) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("partials2wave", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2.__pyx_n = 3;
  __pyx_t_2.wave = __pyx_v_wave;
  __pyx_t_2.table_size = __pyx_v_table_size;
  __pyx_t_2.norm = __pyx_v_norm;
  __pyx_t_1 = ((PyObject *)__pyx_f_8pysndlib_3clm_partials2wave(__pyx_v_partials, 0, &__pyx_t_2)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1539, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pysndlib.clm.partials2wave", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__217 = PyTuple_Pack(4, __pyx_n_s_partials, __pyx_n_s_wave, __pyx_n_s_table_size, __pyx_n_s_norm); if (unlikely(!__pyx_tuple__217)) __PYX_ERR(0, 1539, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__217);
  __Pyx_GIVEREF(__pyx_tuple__217);
  __pyx_codeobj__218 = (PyObject*)__Pyx_PyCode_New(4, 0, 0, 4, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__217, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_partials2wave, 1539, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__218)) __PYX_ERR(0, 1539, __pyx_L1_error)
/* … */
  __pyx_t_37 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 1539, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  if (PyDict_SetItem(__pyx_t_37, __pyx_n_s_wave, __pyx_kp_s_npt_NDArray_np_float64) < 0) __PYX_ERR(0, 1539, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_37, __pyx_n_s_table_size, __pyx_kp_s_Optional_int) < 0) __PYX_ERR(0, 1539, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_37, __pyx_n_s_norm, __pyx_kp_s_Optional_bool) < 0) __PYX_ERR(0, 1539, __pyx_L1_error)
  __pyx_t_40 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_137partials2wave, 0, __pyx_n_s_partials2wave, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__218)); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 1539, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_40, __pyx_tuple__219);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_40, __pyx_t_37);
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_partials2wave, __pyx_t_40) < 0) __PYX_ERR(0, 1539, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
  __pyx_tuple__219 = PyTuple_Pack(3, Py_None, Py_None, Py_True); if (unlikely(!__pyx_tuple__219)) __PYX_ERR(0, 1539, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__219);
  __Pyx_GIVEREF(__pyx_tuple__219);
/* … */
struct __pyx_opt_args_8pysndlib_3clm_partials2wave {
  int __pyx_n;
  PyObject *wave;
  PyObject *table_size;
  PyObject *norm;
};
 1540:     """
 1541:     take a list or np.ndarray of partials (harmonic number and associated amplitude) and produce a
 1542:     waveform for use in table_lookup.
 1543:     
 1544:     :param partials: list or np.ndarray of partials (harm and amp)
 1545:     :param wave: array to write wave into. if not provided, one will be allocated
 1546:     :param table_size: size of table
 1547:     :param norm: whether to normalize partials
 1548:     :return: array provided in wave or new array.
 1549:     :rtype: np.ndarray
 1550:     
 1551:     """
 1552: 
+1553:     if isinstance(partials, list):
  __pyx_t_1 = PyList_Check(__pyx_v_partials); 
  if (__pyx_t_1) {
/* … */
  }
+1554:         partials = np.array(partials, dtype=np.double)
    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1554, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_array); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1554, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1554, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_INCREF(__pyx_v_partials);
    __Pyx_GIVEREF(__pyx_v_partials);
    PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_partials);
    __pyx_t_4 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1554, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_np); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1554, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_double); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1554, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_dtype, __pyx_t_6) < 0) __PYX_ERR(0, 1554, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_2, __pyx_t_4); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1554, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF_SET(__pyx_v_partials, __pyx_t_6);
    __pyx_t_6 = 0;
 1555: 
+1556:     if isinstance(wave, list):
  __pyx_t_1 = PyList_Check(__pyx_v_wave); 
  if (__pyx_t_1) {
/* … */
  }
+1557:         wave = np.array(wave, dtype=np.double)
    __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_np); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1557, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_array); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1557, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1557, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_INCREF(__pyx_v_wave);
    __Pyx_GIVEREF(__pyx_v_wave);
    PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_v_wave);
    __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1557, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1557, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_double); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1557, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_dtype, __pyx_t_5) < 0) __PYX_ERR(0, 1557, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_6, __pyx_t_2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1557, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF_SET(__pyx_v_wave, __pyx_t_5);
    __pyx_t_5 = 0;
 1558: 
+1559:     if not wave:
  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_wave); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 1559, __pyx_L1_error)
  __pyx_t_7 = (!__pyx_t_1);
  if (__pyx_t_7) {
/* … */
    goto __pyx_L5;
  }
+1560:         if table_size:
    __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_v_table_size); if (unlikely((__pyx_t_7 < 0))) __PYX_ERR(0, 1560, __pyx_L1_error)
    if (__pyx_t_7) {
/* … */
      goto __pyx_L6;
    }
+1561:             wave = np.zeros(table_size)
      __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1561, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_zeros); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1561, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_t_2 = NULL;
      __pyx_t_8 = 0;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_6))) {
        __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_6);
        if (likely(__pyx_t_2)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
          __Pyx_INCREF(__pyx_t_2);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_6, function);
          __pyx_t_8 = 1;
        }
      }
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_v_table_size};
        __pyx_t_5 = __Pyx_PyObject_FastCall(__pyx_t_6, __pyx_callargs+1-__pyx_t_8, 1+__pyx_t_8);
        __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
        if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1561, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      }
      __Pyx_DECREF_SET(__pyx_v_wave, __pyx_t_5);
      __pyx_t_5 = 0;
 1562:         else:
+1563:             wave = np.zeros(CLM.table_size)
    /*else*/ {
      __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_np); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1563, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_zeros); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1563, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_CLM); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1563, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_table_size); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1563, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __pyx_t_6 = NULL;
      __pyx_t_8 = 0;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
        __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2);
        if (likely(__pyx_t_6)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
          __Pyx_INCREF(__pyx_t_6);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_2, function);
          __pyx_t_8 = 1;
        }
      }
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_t_4};
        __pyx_t_5 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_8, 1+__pyx_t_8);
        __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
        if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1563, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      }
      __Pyx_DECREF_SET(__pyx_v_wave, __pyx_t_5);
      __pyx_t_5 = 0;
    }
    __pyx_L6:;
 1564:     else:
+1565:         table_size = len(wave)
  /*else*/ {
    __pyx_t_9 = PyObject_Length(__pyx_v_wave); if (unlikely(__pyx_t_9 == ((Py_ssize_t)-1))) __PYX_ERR(0, 1565, __pyx_L1_error)
    __pyx_t_5 = PyInt_FromSsize_t(__pyx_t_9); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1565, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF_SET(__pyx_v_table_size, __pyx_t_5);
    __pyx_t_5 = 0;
  }
  __pyx_L5:;
 1566: 
+1567:     check_ndim(partials)
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_check_ndim); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1567, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_4 = NULL;
  __pyx_t_8 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_4)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_4);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
      __pyx_t_8 = 1;
    }
  }
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_v_partials};
    __pyx_t_5 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_8, 1+__pyx_t_8);
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1567, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  }
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+1568:     check_ndim(wave)
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_check_ndim); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1568, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_4 = NULL;
  __pyx_t_8 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_4)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_4);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
      __pyx_t_8 = 1;
    }
  }
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_v_wave};
    __pyx_t_5 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_8, 1+__pyx_t_8);
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1568, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  }
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 1569: 
+1570:     cdef double [:] wave_view = wave
  __pyx_t_10 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_wave, PyBUF_WRITABLE); if (unlikely(!__pyx_t_10.memview)) __PYX_ERR(0, 1570, __pyx_L1_error)
  __pyx_v_wave_view = __pyx_t_10;
  __pyx_t_10.memview = NULL;
  __pyx_t_10.data = NULL;
+1571:     cdef double [:] partials_view = partials
  __pyx_t_10 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_partials, PyBUF_WRITABLE); if (unlikely(!__pyx_t_10.memview)) __PYX_ERR(0, 1571, __pyx_L1_error)
  __pyx_v_partials_view = __pyx_t_10;
  __pyx_t_10.memview = NULL;
  __pyx_t_10.data = NULL;
 1572: 
+1573:     cclm.mus_partials_to_wave(&partials_view[0], len(partials) // 2, &wave_view[0], table_size, norm)
  __pyx_t_11 = 0;
  __pyx_t_8 = -1;
  if (__pyx_t_11 < 0) {
    __pyx_t_11 += __pyx_v_partials_view.shape[0];
    if (unlikely(__pyx_t_11 < 0)) __pyx_t_8 = 0;
  } else if (unlikely(__pyx_t_11 >= __pyx_v_partials_view.shape[0])) __pyx_t_8 = 0;
  if (unlikely(__pyx_t_8 != -1)) {
    __Pyx_RaiseBufferIndexError(__pyx_t_8);
    __PYX_ERR(0, 1573, __pyx_L1_error)
  }
  __pyx_t_9 = PyObject_Length(__pyx_v_partials); if (unlikely(__pyx_t_9 == ((Py_ssize_t)-1))) __PYX_ERR(0, 1573, __pyx_L1_error)
  __pyx_t_12 = 0;
  __pyx_t_8 = -1;
  if (__pyx_t_12 < 0) {
    __pyx_t_12 += __pyx_v_wave_view.shape[0];
    if (unlikely(__pyx_t_12 < 0)) __pyx_t_8 = 0;
  } else if (unlikely(__pyx_t_12 >= __pyx_v_wave_view.shape[0])) __pyx_t_8 = 0;
  if (unlikely(__pyx_t_8 != -1)) {
    __Pyx_RaiseBufferIndexError(__pyx_t_8);
    __PYX_ERR(0, 1573, __pyx_L1_error)
  }
  __pyx_t_13 = __Pyx_PyInt_As_mus_long_t(__pyx_v_table_size); if (unlikely((__pyx_t_13 == ((mus_long_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 1573, __pyx_L1_error)
  __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_v_norm); if (unlikely((__pyx_t_7 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1573, __pyx_L1_error)
  (void)(mus_partials_to_wave((&(*((double *) ( /* dim=0 */ (__pyx_v_partials_view.data + __pyx_t_11 * __pyx_v_partials_view.strides[0]) )))), __Pyx_div_Py_ssize_t(__pyx_t_9, 2), (&(*((double *) ( /* dim=0 */ (__pyx_v_wave_view.data + __pyx_t_12 * __pyx_v_wave_view.strides[0]) )))), __pyx_t_13, __pyx_t_7));
+1574:     return wave
  __Pyx_XDECREF((PyObject *)__pyx_r);
  if (!(likely(((__pyx_v_wave) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_wave, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1574, __pyx_L1_error)
  __Pyx_INCREF(__pyx_v_wave);
  __pyx_r = ((PyArrayObject *)__pyx_v_wave);
  goto __pyx_L0;
 1575: 
+1576: cpdef np.ndarray phase_partials2wave(partials, wave: npt.NDArray[np.float64], table_size: Optional[int]=None, norm: Optional[bool]=True ):
static PyObject *__pyx_pw_8pysndlib_3clm_139phase_partials2wave(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyArrayObject *__pyx_f_8pysndlib_3clm_phase_partials2wave(PyObject *__pyx_v_partials, PyObject *__pyx_v_wave, CYTHON_UNUSED int __pyx_skip_dispatch, struct __pyx_opt_args_8pysndlib_3clm_phase_partials2wave *__pyx_optional_args) {
  PyObject *__pyx_v_table_size = ((PyObject *)Py_None);
  PyObject *__pyx_v_norm = ((PyObject *)Py_True);
  __Pyx_memviewslice __pyx_v_wave_view = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_partials_view = { 0, 0, { 0 }, { 0 }, { 0 } };
  PyArrayObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("phase_partials2wave", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_table_size = __pyx_optional_args->table_size;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_norm = __pyx_optional_args->norm;
      }
    }
  }
  __Pyx_INCREF(__pyx_v_partials);
  __Pyx_INCREF(__pyx_v_wave);
  __Pyx_INCREF(__pyx_v_table_size);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __PYX_XCLEAR_MEMVIEW(&__pyx_t_10, 1);
  __Pyx_AddTraceback("pysndlib.clm.phase_partials2wave", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __PYX_XCLEAR_MEMVIEW(&__pyx_v_wave_view, 1);
  __PYX_XCLEAR_MEMVIEW(&__pyx_v_partials_view, 1);
  __Pyx_XDECREF(__pyx_v_partials);
  __Pyx_XDECREF(__pyx_v_wave);
  __Pyx_XDECREF(__pyx_v_table_size);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_139phase_partials2wave(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_138phase_partials2wave, "\n    take a list of partials (harmonic number, amplitude, initial phase) and produce a waveform for use\n    in table_lookup.\n    \n    :param partials: list or np.ndarray of partials (harm, amp, phase)\n    :param wave: array to write wave into. if not provided, one will be allocated\n    :param table_size: size of table\n    :param norm: whether to normalize partials\n    :return: array provided in wave or new array.\n    :rtype: np.ndarray\n    \n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_139phase_partials2wave = {"phase_partials2wave", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_139phase_partials2wave, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_138phase_partials2wave};
static PyObject *__pyx_pw_8pysndlib_3clm_139phase_partials2wave(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_partials = 0;
  PyObject *__pyx_v_wave = 0;
  PyObject *__pyx_v_table_size = 0;
  PyObject *__pyx_v_norm = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("phase_partials2wave (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_partials,&__pyx_n_s_wave,&__pyx_n_s_table_size,&__pyx_n_s_norm,0};
    PyObject* values[4] = {0,0,0,0};
    values[2] = ((PyObject *)Py_None);
    values[3] = ((PyObject *)Py_True);
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  4: values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_partials)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1576, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_wave)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1576, __pyx_L3_error)
        else {
          __Pyx_RaiseArgtupleInvalid("phase_partials2wave", 0, 2, 4, 1); __PYX_ERR(0, 1576, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_table_size);
          if (value) { values[2] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1576, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_norm);
          if (value) { values[3] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1576, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "phase_partials2wave") < 0)) __PYX_ERR(0, 1576, __pyx_L3_error)
      }
    } else {
      switch (__pyx_nargs) {
        case  4: values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_partials = values[0];
    __pyx_v_wave = values[1];
    __pyx_v_table_size = values[2];
    __pyx_v_norm = values[3];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("phase_partials2wave", 0, 2, 4, __pyx_nargs); __PYX_ERR(0, 1576, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.phase_partials2wave", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pysndlib_3clm_138phase_partials2wave(__pyx_self, __pyx_v_partials, __pyx_v_wave, __pyx_v_table_size, __pyx_v_norm);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_138phase_partials2wave(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_partials, PyObject *__pyx_v_wave, PyObject *__pyx_v_table_size, PyObject *__pyx_v_norm) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("phase_partials2wave", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2.__pyx_n = 2;
  __pyx_t_2.table_size = __pyx_v_table_size;
  __pyx_t_2.norm = __pyx_v_norm;
  __pyx_t_1 = ((PyObject *)__pyx_f_8pysndlib_3clm_phase_partials2wave(__pyx_v_partials, __pyx_v_wave, 0, &__pyx_t_2)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1576, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pysndlib.clm.phase_partials2wave", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_codeobj__220 = (PyObject*)__Pyx_PyCode_New(4, 0, 0, 4, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__217, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_phase_partials2wave, 1576, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__220)) __PYX_ERR(0, 1576, __pyx_L1_error)
/* … */
  __pyx_t_40 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 1576, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  if (PyDict_SetItem(__pyx_t_40, __pyx_n_s_wave, __pyx_kp_s_npt_NDArray_np_float64) < 0) __PYX_ERR(0, 1576, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_40, __pyx_n_s_table_size, __pyx_kp_s_Optional_int) < 0) __PYX_ERR(0, 1576, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_40, __pyx_n_s_norm, __pyx_kp_s_Optional_bool) < 0) __PYX_ERR(0, 1576, __pyx_L1_error)
  __pyx_t_37 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_139phase_partials2wave, 0, __pyx_n_s_phase_partials2wave, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__220)); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 1576, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_37, __pyx_tuple__221);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_37, __pyx_t_40);
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_phase_partials2wave, __pyx_t_37) < 0) __PYX_ERR(0, 1576, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
  __pyx_tuple__221 = PyTuple_Pack(2, Py_None, Py_True); if (unlikely(!__pyx_tuple__221)) __PYX_ERR(0, 1576, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__221);
  __Pyx_GIVEREF(__pyx_tuple__221);
/* … */
struct __pyx_opt_args_8pysndlib_3clm_phase_partials2wave {
  int __pyx_n;
  PyObject *table_size;
  PyObject *norm;
};
 1577:     """
 1578:     take a list of partials (harmonic number, amplitude, initial phase) and produce a waveform for use
 1579:     in table_lookup.
 1580:     
 1581:     :param partials: list or np.ndarray of partials (harm, amp, phase)
 1582:     :param wave: array to write wave into. if not provided, one will be allocated
 1583:     :param table_size: size of table
 1584:     :param norm: whether to normalize partials
 1585:     :return: array provided in wave or new array.
 1586:     :rtype: np.ndarray
 1587:     
 1588:     """
 1589: 
+1590:     if isinstance(partials, list):
  __pyx_t_1 = PyList_Check(__pyx_v_partials); 
  if (__pyx_t_1) {
/* … */
  }
+1591:         partials = np.array(partials, dtype=np.double)
    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1591, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_array); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1591, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1591, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_INCREF(__pyx_v_partials);
    __Pyx_GIVEREF(__pyx_v_partials);
    PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_partials);
    __pyx_t_4 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1591, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_np); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1591, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_double); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1591, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_dtype, __pyx_t_6) < 0) __PYX_ERR(0, 1591, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_2, __pyx_t_4); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1591, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF_SET(__pyx_v_partials, __pyx_t_6);
    __pyx_t_6 = 0;
 1592: 
+1593:     if (not wave):
  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_wave); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 1593, __pyx_L1_error)
  __pyx_t_7 = (!__pyx_t_1);
  if (__pyx_t_7) {
/* … */
    goto __pyx_L4;
  }
+1594:         if table_size:
    __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_v_table_size); if (unlikely((__pyx_t_7 < 0))) __PYX_ERR(0, 1594, __pyx_L1_error)
    if (__pyx_t_7) {
/* … */
      goto __pyx_L5;
    }
+1595:             wave = np.zeros(table_size)
      __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1595, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_zeros); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1595, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __pyx_t_4 = NULL;
      __pyx_t_8 = 0;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
        __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_2);
        if (likely(__pyx_t_4)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
          __Pyx_INCREF(__pyx_t_4);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_2, function);
          __pyx_t_8 = 1;
        }
      }
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_v_table_size};
        __pyx_t_6 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_8, 1+__pyx_t_8);
        __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
        if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1595, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_6);
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      }
      __Pyx_DECREF_SET(__pyx_v_wave, __pyx_t_6);
      __pyx_t_6 = 0;
 1596:         else:
+1597:             wave = np.zeros(CLM.table_size)
    /*else*/ {
      __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1597, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_zeros); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1597, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_CLM); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1597, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_table_size); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1597, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_t_2 = NULL;
      __pyx_t_8 = 0;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) {
        __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_4);
        if (likely(__pyx_t_2)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
          __Pyx_INCREF(__pyx_t_2);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_4, function);
          __pyx_t_8 = 1;
        }
      }
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_t_3};
        __pyx_t_6 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_8, 1+__pyx_t_8);
        __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
        if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1597, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_6);
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      }
      __Pyx_DECREF_SET(__pyx_v_wave, __pyx_t_6);
      __pyx_t_6 = 0;
    }
    __pyx_L5:;
 1598:     else:
+1599:         table_size = len(wave)
  /*else*/ {
    __pyx_t_9 = PyObject_Length(__pyx_v_wave); if (unlikely(__pyx_t_9 == ((Py_ssize_t)-1))) __PYX_ERR(0, 1599, __pyx_L1_error)
    __pyx_t_6 = PyInt_FromSsize_t(__pyx_t_9); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1599, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF_SET(__pyx_v_table_size, __pyx_t_6);
    __pyx_t_6 = 0;
  }
  __pyx_L4:;
 1600: 
+1601:     check_ndim(wave)
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_check_ndim); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1601, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_3 = NULL;
  __pyx_t_8 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_4, function);
      __pyx_t_8 = 1;
    }
  }
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_v_wave};
    __pyx_t_6 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_8, 1+__pyx_t_8);
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1601, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  }
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+1602:     check_ndim(partials)
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_check_ndim); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1602, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_3 = NULL;
  __pyx_t_8 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_4, function);
      __pyx_t_8 = 1;
    }
  }
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_v_partials};
    __pyx_t_6 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_8, 1+__pyx_t_8);
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1602, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  }
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
 1603: 
+1604:     cdef double [:] wave_view = wave
  __pyx_t_10 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_wave, PyBUF_WRITABLE); if (unlikely(!__pyx_t_10.memview)) __PYX_ERR(0, 1604, __pyx_L1_error)
  __pyx_v_wave_view = __pyx_t_10;
  __pyx_t_10.memview = NULL;
  __pyx_t_10.data = NULL;
+1605:     cdef double [:] partials_view = partials
  __pyx_t_10 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_partials, PyBUF_WRITABLE); if (unlikely(!__pyx_t_10.memview)) __PYX_ERR(0, 1605, __pyx_L1_error)
  __pyx_v_partials_view = __pyx_t_10;
  __pyx_t_10.memview = NULL;
  __pyx_t_10.data = NULL;
 1606: 
+1607:     cclm.mus_partials_to_wave(&partials_view[0], len(partials) // 3, &wave_view[0], table_size, norm)
  __pyx_t_11 = 0;
  __pyx_t_8 = -1;
  if (__pyx_t_11 < 0) {
    __pyx_t_11 += __pyx_v_partials_view.shape[0];
    if (unlikely(__pyx_t_11 < 0)) __pyx_t_8 = 0;
  } else if (unlikely(__pyx_t_11 >= __pyx_v_partials_view.shape[0])) __pyx_t_8 = 0;
  if (unlikely(__pyx_t_8 != -1)) {
    __Pyx_RaiseBufferIndexError(__pyx_t_8);
    __PYX_ERR(0, 1607, __pyx_L1_error)
  }
  __pyx_t_9 = PyObject_Length(__pyx_v_partials); if (unlikely(__pyx_t_9 == ((Py_ssize_t)-1))) __PYX_ERR(0, 1607, __pyx_L1_error)
  __pyx_t_12 = 0;
  __pyx_t_8 = -1;
  if (__pyx_t_12 < 0) {
    __pyx_t_12 += __pyx_v_wave_view.shape[0];
    if (unlikely(__pyx_t_12 < 0)) __pyx_t_8 = 0;
  } else if (unlikely(__pyx_t_12 >= __pyx_v_wave_view.shape[0])) __pyx_t_8 = 0;
  if (unlikely(__pyx_t_8 != -1)) {
    __Pyx_RaiseBufferIndexError(__pyx_t_8);
    __PYX_ERR(0, 1607, __pyx_L1_error)
  }
  __pyx_t_13 = __Pyx_PyInt_As_mus_long_t(__pyx_v_table_size); if (unlikely((__pyx_t_13 == ((mus_long_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 1607, __pyx_L1_error)
  __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_v_norm); if (unlikely((__pyx_t_7 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1607, __pyx_L1_error)
  (void)(mus_partials_to_wave((&(*((double *) ( /* dim=0 */ (__pyx_v_partials_view.data + __pyx_t_11 * __pyx_v_partials_view.strides[0]) )))), __Pyx_div_Py_ssize_t(__pyx_t_9, 3), (&(*((double *) ( /* dim=0 */ (__pyx_v_wave_view.data + __pyx_t_12 * __pyx_v_wave_view.strides[0]) )))), __pyx_t_13, __pyx_t_7));
+1608:     return wave
  __Pyx_XDECREF((PyObject *)__pyx_r);
  if (!(likely(((__pyx_v_wave) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_wave, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1608, __pyx_L1_error)
  __Pyx_INCREF(__pyx_v_wave);
  __pyx_r = ((PyArrayObject *)__pyx_v_wave);
  goto __pyx_L0;
 1609: 
+1610: cpdef np.ndarray partials2polynomial(partials, kind: Optional[Polynomial]=Polynomial.FIRST_KIND):
static PyObject *__pyx_pw_8pysndlib_3clm_141partials2polynomial(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyArrayObject *__pyx_f_8pysndlib_3clm_partials2polynomial(PyObject *__pyx_v_partials, CYTHON_UNUSED int __pyx_skip_dispatch, struct __pyx_opt_args_8pysndlib_3clm_partials2polynomial *__pyx_optional_args) {
  PyObject *__pyx_v_kind = __pyx_k__21;
  PyArrayObject *__pyx_v_p = NULL;
  __Pyx_memviewslice __pyx_v_p_view = { 0, 0, { 0 }, { 0 }, { 0 } };
  PyArrayObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("partials2polynomial", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_kind = __pyx_optional_args->kind;
    }
  }
  __Pyx_INCREF(__pyx_v_partials);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __PYX_XCLEAR_MEMVIEW(&__pyx_t_8, 1);
  __Pyx_AddTraceback("pysndlib.clm.partials2polynomial", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_p);
  __PYX_XCLEAR_MEMVIEW(&__pyx_v_p_view, 1);
  __Pyx_XDECREF(__pyx_v_partials);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_141partials2polynomial(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_140partials2polynomial, "\n    returns a chebyshev polynomial suitable for use with the polynomial generator to create (via\n    waveshaping) the harmonic spectrum described by the partials argument.\n    \n    :param partials: list or np.ndarray of partials (harm and amp)\n    :param kind: Polynomial.EITHER_KIND, Polynomial.FIRST_KIND, Polynomial.SECOND_KIND, Polynomial.BOTH_KINDS\n    :return: chebyshev polynomial\n    :rtype: np.ndarray\n    \n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_141partials2polynomial = {"partials2polynomial", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_141partials2polynomial, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_140partials2polynomial};
static PyObject *__pyx_pw_8pysndlib_3clm_141partials2polynomial(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_partials = 0;
  PyObject *__pyx_v_kind = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("partials2polynomial (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_partials,&__pyx_n_s_kind,0};
    PyObject* values[2] = {0,0};
    values[1] = __pyx_k__21;
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_partials)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1610, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_kind);
          if (value) { values[1] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1610, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "partials2polynomial") < 0)) __PYX_ERR(0, 1610, __pyx_L3_error)
      }
    } else {
      switch (__pyx_nargs) {
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_partials = values[0];
    __pyx_v_kind = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("partials2polynomial", 0, 1, 2, __pyx_nargs); __PYX_ERR(0, 1610, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.partials2polynomial", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pysndlib_3clm_140partials2polynomial(__pyx_self, __pyx_v_partials, __pyx_v_kind);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_140partials2polynomial(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_partials, PyObject *__pyx_v_kind) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("partials2polynomial", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2.__pyx_n = 1;
  __pyx_t_2.kind = __pyx_v_kind;
  __pyx_t_1 = ((PyObject *)__pyx_f_8pysndlib_3clm_partials2polynomial(__pyx_v_partials, 0, &__pyx_t_2)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1610, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pysndlib.clm.partials2polynomial", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_37 = __Pyx_Enum_Polynomial_to_py(__pyx_e_8pysndlib_3clm_FIRST_KIND); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 1610, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  __pyx_k__21 = __pyx_t_37;
  __Pyx_GIVEREF(__pyx_t_37);
  __pyx_t_37 = 0;
/* … */
  __pyx_tuple__222 = PyTuple_Pack(2, __pyx_n_s_partials, __pyx_n_s_kind); if (unlikely(!__pyx_tuple__222)) __PYX_ERR(0, 1610, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__222);
  __Pyx_GIVEREF(__pyx_tuple__222);
  __pyx_t_37 = __Pyx_Enum_Polynomial_to_py(__pyx_e_8pysndlib_3clm_FIRST_KIND); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 1610, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  __pyx_t_40 = PyTuple_New(1); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 1610, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  __Pyx_GIVEREF(__pyx_t_37);
  PyTuple_SET_ITEM(__pyx_t_40, 0, __pyx_t_37);
  __pyx_t_37 = 0;
  __pyx_t_37 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 1610, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  if (PyDict_SetItem(__pyx_t_37, __pyx_n_s_kind, __pyx_kp_s_Optional_Polynomial) < 0) __PYX_ERR(0, 1610, __pyx_L1_error)
  __pyx_t_41 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_141partials2polynomial, 0, __pyx_n_s_partials2polynomial, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__223)); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 1610, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_41, __pyx_t_40);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_41, __pyx_t_37);
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_partials2polynomial, __pyx_t_41) < 0) __PYX_ERR(0, 1610, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
  __pyx_codeobj__223 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__222, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_partials2polynomial, 1610, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__223)) __PYX_ERR(0, 1610, __pyx_L1_error)
/* … */
struct __pyx_opt_args_8pysndlib_3clm_partials2polynomial {
  int __pyx_n;
  PyObject *kind;
};
 1611:     """
 1612:     returns a chebyshev polynomial suitable for use with the polynomial generator to create (via
 1613:     waveshaping) the harmonic spectrum described by the partials argument.
 1614:     
 1615:     :param partials: list or np.ndarray of partials (harm and amp)
 1616:     :param kind: Polynomial.EITHER_KIND, Polynomial.FIRST_KIND, Polynomial.SECOND_KIND, Polynomial.BOTH_KINDS
 1617:     :return: chebyshev polynomial
 1618:     :rtype: np.ndarray
 1619:     
 1620:     """
+1621:     if isinstance(partials, list):
  __pyx_t_1 = PyList_Check(__pyx_v_partials); 
  if (__pyx_t_1) {
/* … */
  }
+1622:         partials = np.array(partials, dtype=np.double)
    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1622, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_array); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1622, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1622, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_INCREF(__pyx_v_partials);
    __Pyx_GIVEREF(__pyx_v_partials);
    PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_partials);
    __pyx_t_4 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1622, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_np); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1622, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_double); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1622, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_dtype, __pyx_t_6) < 0) __PYX_ERR(0, 1622, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_2, __pyx_t_4); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1622, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF_SET(__pyx_v_partials, __pyx_t_6);
    __pyx_t_6 = 0;
 1623: 
+1624:     check_ndim(partials)
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_check_ndim); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1624, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_2 = NULL;
  __pyx_t_7 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_4);
    if (likely(__pyx_t_2)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
      __Pyx_INCREF(__pyx_t_2);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_4, function);
      __pyx_t_7 = 1;
    }
  }
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_v_partials};
    __pyx_t_6 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_7, 1+__pyx_t_7);
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1624, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  }
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
 1625: 
+1626:     p = to_partials(partials)
  __pyx_t_6 = ((PyObject *)__pyx_f_8pysndlib_3clm_to_partials(__pyx_v_partials, 0)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1626, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_v_p = ((PyArrayObject *)__pyx_t_6);
  __pyx_t_6 = 0;
 1627: 
+1628:     cdef double [:] p_view = p
  __pyx_t_8 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(((PyObject *)__pyx_v_p), PyBUF_WRITABLE); if (unlikely(!__pyx_t_8.memview)) __PYX_ERR(0, 1628, __pyx_L1_error)
  __pyx_v_p_view = __pyx_t_8;
  __pyx_t_8.memview = NULL;
  __pyx_t_8.data = NULL;
 1629: 
+1630:     cclm.mus_partials_to_polynomial(len(p), &p_view[0], kind)
  __pyx_t_9 = PyObject_Length(((PyObject *)__pyx_v_p)); if (unlikely(__pyx_t_9 == ((Py_ssize_t)-1))) __PYX_ERR(0, 1630, __pyx_L1_error)
  __pyx_t_10 = 0;
  __pyx_t_7 = -1;
  if (__pyx_t_10 < 0) {
    __pyx_t_10 += __pyx_v_p_view.shape[0];
    if (unlikely(__pyx_t_10 < 0)) __pyx_t_7 = 0;
  } else if (unlikely(__pyx_t_10 >= __pyx_v_p_view.shape[0])) __pyx_t_7 = 0;
  if (unlikely(__pyx_t_7 != -1)) {
    __Pyx_RaiseBufferIndexError(__pyx_t_7);
    __PYX_ERR(0, 1630, __pyx_L1_error)
  }
  __pyx_t_11 = ((mus_polynomial_t)__Pyx_PyInt_As_mus_polynomial_t(__pyx_v_kind)); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1630, __pyx_L1_error)
  (void)(mus_partials_to_polynomial(__pyx_t_9, (&(*((double *) ( /* dim=0 */ (__pyx_v_p_view.data + __pyx_t_10 * __pyx_v_p_view.strides[0]) )))), __pyx_t_11));
+1631:     return p
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __Pyx_INCREF((PyObject *)__pyx_v_p);
  __pyx_r = __pyx_v_p;
  goto __pyx_L0;
 1632: 
+1633: cpdef np.ndarray normalize_partials(partials):
static PyObject *__pyx_pw_8pysndlib_3clm_143normalize_partials(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyArrayObject *__pyx_f_8pysndlib_3clm_normalize_partials(PyObject *__pyx_v_partials, CYTHON_UNUSED int __pyx_skip_dispatch) {
  __Pyx_memviewslice __pyx_v_partials_view = { 0, 0, { 0 }, { 0 }, { 0 } };
  PyArrayObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("normalize_partials", 0);
  __Pyx_INCREF(__pyx_v_partials);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __PYX_XCLEAR_MEMVIEW(&__pyx_t_8, 1);
  __Pyx_AddTraceback("pysndlib.clm.normalize_partials", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __PYX_XCLEAR_MEMVIEW(&__pyx_v_partials_view, 1);
  __Pyx_XDECREF(__pyx_v_partials);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_143normalize_partials(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_142normalize_partials, "\n    scales the partial amplitudes in the list/array or list 'partials' by the inverse of their sum (so\n    that they add to 1.0).\n\n    :param partials: list or np.ndarray of partials (harm and amp)\n    :return: normalized partials\n    :rtype: np.ndarray      \n    \n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_143normalize_partials = {"normalize_partials", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_143normalize_partials, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_142normalize_partials};
static PyObject *__pyx_pw_8pysndlib_3clm_143normalize_partials(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_partials = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("normalize_partials (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_partials,0};
    PyObject* values[1] = {0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_partials)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1633, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "normalize_partials") < 0)) __PYX_ERR(0, 1633, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
    }
    __pyx_v_partials = values[0];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("normalize_partials", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 1633, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.normalize_partials", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pysndlib_3clm_142normalize_partials(__pyx_self, __pyx_v_partials);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_142normalize_partials(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_partials) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("normalize_partials", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = ((PyObject *)__pyx_f_8pysndlib_3clm_normalize_partials(__pyx_v_partials, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1633, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pysndlib.clm.normalize_partials", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__224 = PyTuple_Pack(1, __pyx_n_s_partials); if (unlikely(!__pyx_tuple__224)) __PYX_ERR(0, 1633, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__224);
  __Pyx_GIVEREF(__pyx_tuple__224);
/* … */
  __pyx_t_41 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_143normalize_partials, 0, __pyx_n_s_normalize_partials, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__225)); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 1633, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_normalize_partials, __pyx_t_41) < 0) __PYX_ERR(0, 1633, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
  __pyx_codeobj__225 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__224, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_normalize_partials, 1633, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__225)) __PYX_ERR(0, 1633, __pyx_L1_error)
 1634:     """
 1635:     scales the partial amplitudes in the list/array or list 'partials' by the inverse of their sum (so
 1636:     that they add to 1.0).
 1637: 
 1638:     :param partials: list or np.ndarray of partials (harm and amp)
 1639:     :return: normalized partials
 1640:     :rtype: np.ndarray      
 1641:     
 1642:     """
+1643:     if isinstance(partials, list):
  __pyx_t_1 = PyList_Check(__pyx_v_partials); 
  if (__pyx_t_1) {
/* … */
  }
+1644:         partials = np.array(partials, dtype=np.double)
    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1644, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_array); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1644, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1644, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_INCREF(__pyx_v_partials);
    __Pyx_GIVEREF(__pyx_v_partials);
    PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_partials);
    __pyx_t_4 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1644, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_np); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1644, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_double); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1644, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_dtype, __pyx_t_6) < 0) __PYX_ERR(0, 1644, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_2, __pyx_t_4); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1644, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF_SET(__pyx_v_partials, __pyx_t_6);
    __pyx_t_6 = 0;
 1645: 
+1646:     check_ndim(partials)
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_check_ndim); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1646, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_2 = NULL;
  __pyx_t_7 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_4);
    if (likely(__pyx_t_2)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
      __Pyx_INCREF(__pyx_t_2);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_4, function);
      __pyx_t_7 = 1;
    }
  }
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_v_partials};
    __pyx_t_6 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_7, 1+__pyx_t_7);
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1646, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  }
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
 1647: 
+1648:     cdef double [:] partials_view = partials
  __pyx_t_8 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_partials, PyBUF_WRITABLE); if (unlikely(!__pyx_t_8.memview)) __PYX_ERR(0, 1648, __pyx_L1_error)
  __pyx_v_partials_view = __pyx_t_8;
  __pyx_t_8.memview = NULL;
  __pyx_t_8.data = NULL;
 1649: 
+1650:     cclm.mus_normalize_partials(len(partials), &partials_view[0])
  __pyx_t_9 = PyObject_Length(__pyx_v_partials); if (unlikely(__pyx_t_9 == ((Py_ssize_t)-1))) __PYX_ERR(0, 1650, __pyx_L1_error)
  __pyx_t_10 = 0;
  __pyx_t_7 = -1;
  if (__pyx_t_10 < 0) {
    __pyx_t_10 += __pyx_v_partials_view.shape[0];
    if (unlikely(__pyx_t_10 < 0)) __pyx_t_7 = 0;
  } else if (unlikely(__pyx_t_10 >= __pyx_v_partials_view.shape[0])) __pyx_t_7 = 0;
  if (unlikely(__pyx_t_7 != -1)) {
    __Pyx_RaiseBufferIndexError(__pyx_t_7);
    __PYX_ERR(0, 1650, __pyx_L1_error)
  }
  (void)(mus_normalize_partials(__pyx_t_9, (&(*((double *) ( /* dim=0 */ (__pyx_v_partials_view.data + __pyx_t_10 * __pyx_v_partials_view.strides[0]) ))))));
 1651: 
+1652:     return partials
  __Pyx_XDECREF((PyObject *)__pyx_r);
  if (!(likely(((__pyx_v_partials) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_partials, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1652, __pyx_L1_error)
  __Pyx_INCREF(__pyx_v_partials);
  __pyx_r = ((PyArrayObject *)__pyx_v_partials);
  goto __pyx_L0;
 1653: 
+1654: cpdef cython.double chebyshev_tu_sum(x: cython.double, tcoeffs: npt.NDArray[np.float64], ucoeffs: npt.NDArray[np.float64]):
static PyObject *__pyx_pw_8pysndlib_3clm_145chebyshev_tu_sum(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static double __pyx_f_8pysndlib_3clm_chebyshev_tu_sum(double __pyx_v_x, PyObject *__pyx_v_tcoeffs, PyObject *__pyx_v_ucoeffs, CYTHON_UNUSED int __pyx_skip_dispatch) {
  __Pyx_memviewslice __pyx_v_tcoeffs_view = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_ucoeffs_view = { 0, 0, { 0 }, { 0 }, { 0 } };
  double __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("chebyshev_tu_sum", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __PYX_XCLEAR_MEMVIEW(&__pyx_t_5, 1);
  __Pyx_AddTraceback("pysndlib.clm.chebyshev_tu_sum", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __PYX_XCLEAR_MEMVIEW(&__pyx_v_tcoeffs_view, 1);
  __PYX_XCLEAR_MEMVIEW(&__pyx_v_ucoeffs_view, 1);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_145chebyshev_tu_sum(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_144chebyshev_tu_sum, "\n    returns the sum of the weighted chebyshev polynomials tn and un, with phase x\n    \n    :param x: input\n    :param tcoeffs: tn\n    :param ucoeffs: un\n    :rtype: float\n    \n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_145chebyshev_tu_sum = {"chebyshev_tu_sum", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_145chebyshev_tu_sum, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_144chebyshev_tu_sum};
static PyObject *__pyx_pw_8pysndlib_3clm_145chebyshev_tu_sum(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  double __pyx_v_x;
  PyObject *__pyx_v_tcoeffs = 0;
  PyObject *__pyx_v_ucoeffs = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("chebyshev_tu_sum (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_x,&__pyx_n_s_tcoeffs,&__pyx_n_s_ucoeffs,0};
    PyObject* values[3] = {0,0,0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_x)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1654, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_tcoeffs)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1654, __pyx_L3_error)
        else {
          __Pyx_RaiseArgtupleInvalid("chebyshev_tu_sum", 1, 3, 3, 1); __PYX_ERR(0, 1654, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_ucoeffs)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1654, __pyx_L3_error)
        else {
          __Pyx_RaiseArgtupleInvalid("chebyshev_tu_sum", 1, 3, 3, 2); __PYX_ERR(0, 1654, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "chebyshev_tu_sum") < 0)) __PYX_ERR(0, 1654, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 3)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
      values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
      values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
    }
    __pyx_v_x = __pyx_PyFloat_AsDouble(values[0]); if (unlikely((__pyx_v_x == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 1654, __pyx_L3_error)
    __pyx_v_tcoeffs = values[1];
    __pyx_v_ucoeffs = values[2];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("chebyshev_tu_sum", 1, 3, 3, __pyx_nargs); __PYX_ERR(0, 1654, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.chebyshev_tu_sum", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pysndlib_3clm_144chebyshev_tu_sum(__pyx_self, __pyx_v_x, __pyx_v_tcoeffs, __pyx_v_ucoeffs);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_144chebyshev_tu_sum(CYTHON_UNUSED PyObject *__pyx_self, double __pyx_v_x, PyObject *__pyx_v_tcoeffs, PyObject *__pyx_v_ucoeffs) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("chebyshev_tu_sum", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_8pysndlib_3clm_chebyshev_tu_sum(__pyx_v_x, __pyx_v_tcoeffs, __pyx_v_ucoeffs, 0); if (unlikely(__pyx_t_1 == ((double)-1) && PyErr_Occurred())) __PYX_ERR(0, 1654, __pyx_L1_error)
  __pyx_t_2 = PyFloat_FromDouble(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1654, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pysndlib.clm.chebyshev_tu_sum", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__226 = PyTuple_Pack(3, __pyx_n_s_x, __pyx_n_s_tcoeffs, __pyx_n_s_ucoeffs); if (unlikely(!__pyx_tuple__226)) __PYX_ERR(0, 1654, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__226);
  __Pyx_GIVEREF(__pyx_tuple__226);
/* … */
  __pyx_t_41 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 1654, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  if (PyDict_SetItem(__pyx_t_41, __pyx_n_s_x, __pyx_kp_s_cython_double) < 0) __PYX_ERR(0, 1654, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_41, __pyx_n_s_tcoeffs, __pyx_kp_s_npt_NDArray_np_float64) < 0) __PYX_ERR(0, 1654, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_41, __pyx_n_s_ucoeffs, __pyx_kp_s_npt_NDArray_np_float64) < 0) __PYX_ERR(0, 1654, __pyx_L1_error)
  __pyx_t_37 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_145chebyshev_tu_sum, 0, __pyx_n_s_chebyshev_tu_sum, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__227)); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 1654, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_37, __pyx_t_41);
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_chebyshev_tu_sum, __pyx_t_37) < 0) __PYX_ERR(0, 1654, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
  __pyx_codeobj__227 = (PyObject*)__Pyx_PyCode_New(3, 0, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__226, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_chebyshev_tu_sum, 1654, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__227)) __PYX_ERR(0, 1654, __pyx_L1_error)
 1655:     """
 1656:     returns the sum of the weighted chebyshev polynomials tn and un, with phase x
 1657:     
 1658:     :param x: input
 1659:     :param tcoeffs: tn
 1660:     :param ucoeffs: un
 1661:     :rtype: float
 1662:     
 1663:     """
 1664: 
+1665:     check_ndim(tcoeffs)
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_check_ndim); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1665, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  __pyx_t_4 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
      __pyx_t_4 = 1;
    }
  }
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_v_tcoeffs};
    __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4);
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1665, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+1666:     check_ndim(ucoeffs)
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_check_ndim); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1666, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  __pyx_t_4 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
      __pyx_t_4 = 1;
    }
  }
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_v_ucoeffs};
    __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4);
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1666, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+1667:     compare_shapes(tcoeffs, ucoeffs)
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_compare_shapes); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1667, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  __pyx_t_4 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
      __pyx_t_4 = 1;
    }
  }
  {
    PyObject *__pyx_callargs[3] = {__pyx_t_3, __pyx_v_tcoeffs, __pyx_v_ucoeffs};
    __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 2+__pyx_t_4);
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1667, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 1668: 
+1669:     cdef double [:] tcoeffs_view = tcoeffs
  __pyx_t_5 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_tcoeffs, PyBUF_WRITABLE); if (unlikely(!__pyx_t_5.memview)) __PYX_ERR(0, 1669, __pyx_L1_error)
  __pyx_v_tcoeffs_view = __pyx_t_5;
  __pyx_t_5.memview = NULL;
  __pyx_t_5.data = NULL;
+1670:     cdef double [:] ucoeffs_view = ucoeffs
  __pyx_t_5 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_ucoeffs, PyBUF_WRITABLE); if (unlikely(!__pyx_t_5.memview)) __PYX_ERR(0, 1670, __pyx_L1_error)
  __pyx_v_ucoeffs_view = __pyx_t_5;
  __pyx_t_5.memview = NULL;
  __pyx_t_5.data = NULL;
+1671:     return cclm.mus_chebyshev_tu_sum(x, len(tcoeffs), &tcoeffs_view[0], &ucoeffs_view[0])
  __pyx_t_6 = PyObject_Length(__pyx_v_tcoeffs); if (unlikely(__pyx_t_6 == ((Py_ssize_t)-1))) __PYX_ERR(0, 1671, __pyx_L1_error)
  __pyx_t_7 = 0;
  __pyx_t_4 = -1;
  if (__pyx_t_7 < 0) {
    __pyx_t_7 += __pyx_v_tcoeffs_view.shape[0];
    if (unlikely(__pyx_t_7 < 0)) __pyx_t_4 = 0;
  } else if (unlikely(__pyx_t_7 >= __pyx_v_tcoeffs_view.shape[0])) __pyx_t_4 = 0;
  if (unlikely(__pyx_t_4 != -1)) {
    __Pyx_RaiseBufferIndexError(__pyx_t_4);
    __PYX_ERR(0, 1671, __pyx_L1_error)
  }
  __pyx_t_8 = 0;
  __pyx_t_4 = -1;
  if (__pyx_t_8 < 0) {
    __pyx_t_8 += __pyx_v_ucoeffs_view.shape[0];
    if (unlikely(__pyx_t_8 < 0)) __pyx_t_4 = 0;
  } else if (unlikely(__pyx_t_8 >= __pyx_v_ucoeffs_view.shape[0])) __pyx_t_4 = 0;
  if (unlikely(__pyx_t_4 != -1)) {
    __Pyx_RaiseBufferIndexError(__pyx_t_4);
    __PYX_ERR(0, 1671, __pyx_L1_error)
  }
  __pyx_r = mus_chebyshev_tu_sum(__pyx_v_x, __pyx_t_6, (&(*((double *) ( /* dim=0 */ (__pyx_v_tcoeffs_view.data + __pyx_t_7 * __pyx_v_tcoeffs_view.strides[0]) )))), (&(*((double *) ( /* dim=0 */ (__pyx_v_ucoeffs_view.data + __pyx_t_8 * __pyx_v_ucoeffs_view.strides[0]) )))));
  goto __pyx_L0;
 1672: 
 1673: 
+1674: cpdef cython.double chebyshev_t_sum(x: cython.double, tcoeffs: npt.NDArray[np.float64]):
static PyObject *__pyx_pw_8pysndlib_3clm_147chebyshev_t_sum(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static double __pyx_f_8pysndlib_3clm_chebyshev_t_sum(double __pyx_v_x, PyObject *__pyx_v_tcoeffs, CYTHON_UNUSED int __pyx_skip_dispatch) {
  __Pyx_memviewslice __pyx_v_tcoeffs_view = { 0, 0, { 0 }, { 0 }, { 0 } };
  double __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("chebyshev_t_sum", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __PYX_XCLEAR_MEMVIEW(&__pyx_t_5, 1);
  __Pyx_AddTraceback("pysndlib.clm.chebyshev_t_sum", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __PYX_XCLEAR_MEMVIEW(&__pyx_v_tcoeffs_view, 1);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_147chebyshev_t_sum(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_146chebyshev_t_sum, "\n    returns the sum of the weighted chebyshev polynomials tn\n    \n    :param x: nput\n    :param tcoeffs: tn\n    :rtype: float\n    \n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_147chebyshev_t_sum = {"chebyshev_t_sum", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_147chebyshev_t_sum, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_146chebyshev_t_sum};
static PyObject *__pyx_pw_8pysndlib_3clm_147chebyshev_t_sum(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  double __pyx_v_x;
  PyObject *__pyx_v_tcoeffs = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("chebyshev_t_sum (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_x,&__pyx_n_s_tcoeffs,0};
    PyObject* values[2] = {0,0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_x)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1674, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_tcoeffs)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1674, __pyx_L3_error)
        else {
          __Pyx_RaiseArgtupleInvalid("chebyshev_t_sum", 1, 2, 2, 1); __PYX_ERR(0, 1674, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "chebyshev_t_sum") < 0)) __PYX_ERR(0, 1674, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 2)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
      values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
    }
    __pyx_v_x = __pyx_PyFloat_AsDouble(values[0]); if (unlikely((__pyx_v_x == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 1674, __pyx_L3_error)
    __pyx_v_tcoeffs = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("chebyshev_t_sum", 1, 2, 2, __pyx_nargs); __PYX_ERR(0, 1674, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.chebyshev_t_sum", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pysndlib_3clm_146chebyshev_t_sum(__pyx_self, __pyx_v_x, __pyx_v_tcoeffs);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_146chebyshev_t_sum(CYTHON_UNUSED PyObject *__pyx_self, double __pyx_v_x, PyObject *__pyx_v_tcoeffs) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("chebyshev_t_sum", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_8pysndlib_3clm_chebyshev_t_sum(__pyx_v_x, __pyx_v_tcoeffs, 0); if (unlikely(__pyx_t_1 == ((double)-1) && PyErr_Occurred())) __PYX_ERR(0, 1674, __pyx_L1_error)
  __pyx_t_2 = PyFloat_FromDouble(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1674, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pysndlib.clm.chebyshev_t_sum", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__228 = PyTuple_Pack(2, __pyx_n_s_x, __pyx_n_s_tcoeffs); if (unlikely(!__pyx_tuple__228)) __PYX_ERR(0, 1674, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__228);
  __Pyx_GIVEREF(__pyx_tuple__228);
/* … */
  __pyx_t_37 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 1674, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  if (PyDict_SetItem(__pyx_t_37, __pyx_n_s_x, __pyx_kp_s_cython_double) < 0) __PYX_ERR(0, 1674, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_37, __pyx_n_s_tcoeffs, __pyx_kp_s_npt_NDArray_np_float64) < 0) __PYX_ERR(0, 1674, __pyx_L1_error)
  __pyx_t_41 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_147chebyshev_t_sum, 0, __pyx_n_s_chebyshev_t_sum, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__229)); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 1674, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_41, __pyx_t_37);
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_chebyshev_t_sum, __pyx_t_41) < 0) __PYX_ERR(0, 1674, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
  __pyx_codeobj__229 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__228, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_chebyshev_t_sum, 1674, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__229)) __PYX_ERR(0, 1674, __pyx_L1_error)
 1675:     """
 1676:     returns the sum of the weighted chebyshev polynomials tn
 1677:     
 1678:     :param x: nput
 1679:     :param tcoeffs: tn
 1680:     :rtype: float
 1681:     
 1682:     """
 1683: 
+1684:     check_ndim(tcoeffs)
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_check_ndim); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1684, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  __pyx_t_4 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
      __pyx_t_4 = 1;
    }
  }
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_v_tcoeffs};
    __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4);
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1684, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 1685: 
+1686:     cdef double [:] tcoeffs_view = tcoeffs
  __pyx_t_5 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_tcoeffs, PyBUF_WRITABLE); if (unlikely(!__pyx_t_5.memview)) __PYX_ERR(0, 1686, __pyx_L1_error)
  __pyx_v_tcoeffs_view = __pyx_t_5;
  __pyx_t_5.memview = NULL;
  __pyx_t_5.data = NULL;
+1687:     return cclm.mus_chebyshev_t_sum(x,len(tcoeffs), &tcoeffs_view[0])
  __pyx_t_6 = PyObject_Length(__pyx_v_tcoeffs); if (unlikely(__pyx_t_6 == ((Py_ssize_t)-1))) __PYX_ERR(0, 1687, __pyx_L1_error)
  __pyx_t_7 = 0;
  __pyx_t_4 = -1;
  if (__pyx_t_7 < 0) {
    __pyx_t_7 += __pyx_v_tcoeffs_view.shape[0];
    if (unlikely(__pyx_t_7 < 0)) __pyx_t_4 = 0;
  } else if (unlikely(__pyx_t_7 >= __pyx_v_tcoeffs_view.shape[0])) __pyx_t_4 = 0;
  if (unlikely(__pyx_t_4 != -1)) {
    __Pyx_RaiseBufferIndexError(__pyx_t_4);
    __PYX_ERR(0, 1687, __pyx_L1_error)
  }
  __pyx_r = mus_chebyshev_t_sum(__pyx_v_x, __pyx_t_6, (&(*((double *) ( /* dim=0 */ (__pyx_v_tcoeffs_view.data + __pyx_t_7 * __pyx_v_tcoeffs_view.strides[0]) )))));
  goto __pyx_L0;
 1688: 
+1689: cpdef cython.double chebyshev_u_sum(x: cython.double, ucoeffs: npt.NDArray[np.float64]):
static PyObject *__pyx_pw_8pysndlib_3clm_149chebyshev_u_sum(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static double __pyx_f_8pysndlib_3clm_chebyshev_u_sum(double __pyx_v_x, PyObject *__pyx_v_ucoeffs, CYTHON_UNUSED int __pyx_skip_dispatch) {
  __Pyx_memviewslice __pyx_v_ucoeffs_view = { 0, 0, { 0 }, { 0 }, { 0 } };
  double __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("chebyshev_u_sum", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __PYX_XCLEAR_MEMVIEW(&__pyx_t_5, 1);
  __Pyx_AddTraceback("pysndlib.clm.chebyshev_u_sum", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __PYX_XCLEAR_MEMVIEW(&__pyx_v_ucoeffs_view, 1);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_149chebyshev_u_sum(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_148chebyshev_u_sum, "\n    returns the sum of the weighted chebyshev polynomials un\n    \n    :param x: input\n    :param ucoeffs: un\n    :rtype: float\n    \n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_149chebyshev_u_sum = {"chebyshev_u_sum", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_149chebyshev_u_sum, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_148chebyshev_u_sum};
static PyObject *__pyx_pw_8pysndlib_3clm_149chebyshev_u_sum(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  double __pyx_v_x;
  PyObject *__pyx_v_ucoeffs = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("chebyshev_u_sum (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_x,&__pyx_n_s_ucoeffs,0};
    PyObject* values[2] = {0,0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_x)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1689, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_ucoeffs)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1689, __pyx_L3_error)
        else {
          __Pyx_RaiseArgtupleInvalid("chebyshev_u_sum", 1, 2, 2, 1); __PYX_ERR(0, 1689, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "chebyshev_u_sum") < 0)) __PYX_ERR(0, 1689, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 2)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
      values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
    }
    __pyx_v_x = __pyx_PyFloat_AsDouble(values[0]); if (unlikely((__pyx_v_x == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 1689, __pyx_L3_error)
    __pyx_v_ucoeffs = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("chebyshev_u_sum", 1, 2, 2, __pyx_nargs); __PYX_ERR(0, 1689, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.chebyshev_u_sum", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pysndlib_3clm_148chebyshev_u_sum(__pyx_self, __pyx_v_x, __pyx_v_ucoeffs);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_148chebyshev_u_sum(CYTHON_UNUSED PyObject *__pyx_self, double __pyx_v_x, PyObject *__pyx_v_ucoeffs) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("chebyshev_u_sum", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_8pysndlib_3clm_chebyshev_u_sum(__pyx_v_x, __pyx_v_ucoeffs, 0); if (unlikely(__pyx_t_1 == ((double)-1) && PyErr_Occurred())) __PYX_ERR(0, 1689, __pyx_L1_error)
  __pyx_t_2 = PyFloat_FromDouble(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1689, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pysndlib.clm.chebyshev_u_sum", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__230 = PyTuple_Pack(2, __pyx_n_s_x, __pyx_n_s_ucoeffs); if (unlikely(!__pyx_tuple__230)) __PYX_ERR(0, 1689, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__230);
  __Pyx_GIVEREF(__pyx_tuple__230);
/* … */
  __pyx_t_41 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 1689, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  if (PyDict_SetItem(__pyx_t_41, __pyx_n_s_x, __pyx_kp_s_cython_double) < 0) __PYX_ERR(0, 1689, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_41, __pyx_n_s_ucoeffs, __pyx_kp_s_npt_NDArray_np_float64) < 0) __PYX_ERR(0, 1689, __pyx_L1_error)
  __pyx_t_37 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_149chebyshev_u_sum, 0, __pyx_n_s_chebyshev_u_sum, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__231)); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 1689, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_37, __pyx_t_41);
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_chebyshev_u_sum, __pyx_t_37) < 0) __PYX_ERR(0, 1689, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
  __pyx_codeobj__231 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__230, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_chebyshev_u_sum, 1689, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__231)) __PYX_ERR(0, 1689, __pyx_L1_error)
 1690:     """
 1691:     returns the sum of the weighted chebyshev polynomials un
 1692:     
 1693:     :param x: input
 1694:     :param ucoeffs: un
 1695:     :rtype: float
 1696:     
 1697:     """
 1698: 
+1699:     check_ndim(ucoeffs)
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_check_ndim); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1699, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  __pyx_t_4 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
      __pyx_t_4 = 1;
    }
  }
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_v_ucoeffs};
    __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4);
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1699, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 1700: 
+1701:     cdef double [:] ucoeffs_view = ucoeffs
  __pyx_t_5 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_ucoeffs, PyBUF_WRITABLE); if (unlikely(!__pyx_t_5.memview)) __PYX_ERR(0, 1701, __pyx_L1_error)
  __pyx_v_ucoeffs_view = __pyx_t_5;
  __pyx_t_5.memview = NULL;
  __pyx_t_5.data = NULL;
+1702:     return cclm.mus_chebyshev_u_sum(x,len(ucoeffs), &ucoeffs_view[0])
  __pyx_t_6 = PyObject_Length(__pyx_v_ucoeffs); if (unlikely(__pyx_t_6 == ((Py_ssize_t)-1))) __PYX_ERR(0, 1702, __pyx_L1_error)
  __pyx_t_7 = 0;
  __pyx_t_4 = -1;
  if (__pyx_t_7 < 0) {
    __pyx_t_7 += __pyx_v_ucoeffs_view.shape[0];
    if (unlikely(__pyx_t_7 < 0)) __pyx_t_4 = 0;
  } else if (unlikely(__pyx_t_7 >= __pyx_v_ucoeffs_view.shape[0])) __pyx_t_4 = 0;
  if (unlikely(__pyx_t_4 != -1)) {
    __Pyx_RaiseBufferIndexError(__pyx_t_4);
    __PYX_ERR(0, 1702, __pyx_L1_error)
  }
  __pyx_r = mus_chebyshev_u_sum(__pyx_v_x, __pyx_t_6, (&(*((double *) ( /* dim=0 */ (__pyx_v_ucoeffs_view.data + __pyx_t_7 * __pyx_v_ucoeffs_view.strides[0]) )))));
  goto __pyx_L0;
 1703: 
 1704: 
 1705: 
 1706: 
 1707: # ---------------- oscil ---------------- #
+1708: cpdef mus_any make_oscil(frequency: Optional[float]=0., initial_phase: Optional[float] = 0.0):
static PyObject *__pyx_pw_8pysndlib_3clm_151make_oscil(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_f_8pysndlib_3clm_make_oscil(CYTHON_UNUSED int __pyx_skip_dispatch, struct __pyx_opt_args_8pysndlib_3clm_make_oscil *__pyx_optional_args) {
  PyObject *__pyx_v_frequency = ((PyObject *)__pyx_float_0_);
  PyObject *__pyx_v_initial_phase = ((PyObject *)__pyx_float_0_0);
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("make_oscil", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_frequency = __pyx_optional_args->frequency;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_initial_phase = __pyx_optional_args->initial_phase;
      }
    }
  }
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("pysndlib.clm.make_oscil", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_151make_oscil(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_150make_oscil, "\n    return a new oscil (sinewave) generator\n    \n    :param frequency: frequency in hz\n    :param initial_phase: initial phase in radians\n    :return: oscil gen\n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_151make_oscil = {"make_oscil", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_151make_oscil, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_150make_oscil};
static PyObject *__pyx_pw_8pysndlib_3clm_151make_oscil(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_frequency = 0;
  PyObject *__pyx_v_initial_phase = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("make_oscil (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_frequency,&__pyx_n_s_initial_phase,0};
    PyObject* values[2] = {0,0};
    values[0] = ((PyObject *)__pyx_float_0_);
    values[1] = ((PyObject *)__pyx_float_0_0);
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_frequency);
          if (value) { values[0] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1708, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_initial_phase);
          if (value) { values[1] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1708, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "make_oscil") < 0)) __PYX_ERR(0, 1708, __pyx_L3_error)
      }
    } else {
      switch (__pyx_nargs) {
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_frequency = values[0];
    __pyx_v_initial_phase = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("make_oscil", 0, 0, 2, __pyx_nargs); __PYX_ERR(0, 1708, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.make_oscil", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pysndlib_3clm_150make_oscil(__pyx_self, __pyx_v_frequency, __pyx_v_initial_phase);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_150make_oscil(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_frequency, PyObject *__pyx_v_initial_phase) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("make_oscil", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2.__pyx_n = 2;
  __pyx_t_2.frequency = __pyx_v_frequency;
  __pyx_t_2.initial_phase = __pyx_v_initial_phase;
  __pyx_t_1 = ((PyObject *)__pyx_f_8pysndlib_3clm_make_oscil(0, &__pyx_t_2)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1708, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pysndlib.clm.make_oscil", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__232 = PyTuple_Pack(2, __pyx_n_s_frequency, __pyx_n_s_initial_phase); if (unlikely(!__pyx_tuple__232)) __PYX_ERR(0, 1708, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__232);
  __Pyx_GIVEREF(__pyx_tuple__232);
  __pyx_codeobj__233 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__232, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_make_oscil, 1708, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__233)) __PYX_ERR(0, 1708, __pyx_L1_error)
/* … */
  __pyx_t_37 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 1708, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  if (PyDict_SetItem(__pyx_t_37, __pyx_n_s_frequency, __pyx_kp_s_Optional_float) < 0) __PYX_ERR(0, 1708, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_37, __pyx_n_s_initial_phase, __pyx_kp_s_Optional_float) < 0) __PYX_ERR(0, 1708, __pyx_L1_error)
  __pyx_t_41 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_151make_oscil, 0, __pyx_n_s_make_oscil, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__233)); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 1708, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_41, __pyx_tuple__234);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_41, __pyx_t_37);
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_make_oscil, __pyx_t_41) < 0) __PYX_ERR(0, 1708, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
  __pyx_tuple__234 = PyTuple_Pack(2, __pyx_float_0_, __pyx_float_0_0); if (unlikely(!__pyx_tuple__234)) __PYX_ERR(0, 1708, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__234);
  __Pyx_GIVEREF(__pyx_tuple__234);
/* … */
struct __pyx_opt_args_8pysndlib_3clm_make_oscil {
  int __pyx_n;
  PyObject *frequency;
  PyObject *initial_phase;
};
 1709:     """
 1710:     return a new oscil (sinewave) generator
 1711:     
 1712:     :param frequency: frequency in hz
 1713:     :param initial_phase: initial phase in radians
 1714:     :return: oscil gen
 1715:     """
+1716:     check_range('frequency', frequency, 0., get_srate() / 2)
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_check_range); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1716, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __pyx_f_8pysndlib_3clm_get_srate(0); if (unlikely(__pyx_t_3 == ((double)-1) && PyErr_Occurred())) __PYX_ERR(0, 1716, __pyx_L1_error)
  __pyx_t_4 = PyFloat_FromDouble((__pyx_t_3 / 2.0)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1716, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = NULL;
  __pyx_t_6 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_5)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_5);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
      __pyx_t_6 = 1;
    }
  }
  {
    PyObject *__pyx_callargs[5] = {__pyx_t_5, __pyx_n_s_frequency, __pyx_v_frequency, __pyx_float_0_, __pyx_t_4};
    __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_6, 4+__pyx_t_6);
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1716, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 1717: 
 1718: 
+1719:     return mus_any.from_ptr(cclm.mus_make_oscil(frequency, initial_phase))
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __pyx_t_7 = __pyx_PyFloat_AsDouble(__pyx_v_frequency); if (unlikely((__pyx_t_7 == ((mus_float_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 1719, __pyx_L1_error)
  __pyx_t_8 = __pyx_PyFloat_AsDouble(__pyx_v_initial_phase); if (unlikely((__pyx_t_8 == ((mus_float_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 1719, __pyx_L1_error)
  __pyx_t_1 = ((PyObject *)__pyx_vtabptr_8pysndlib_3clm_mus_any->from_ptr(mus_make_oscil(__pyx_t_7, __pyx_t_8), NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1719, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)__pyx_t_1);
  __pyx_t_1 = 0;
  goto __pyx_L0;
 1720: 
+1721: cpdef cython.double oscil(gen: mus_any, fm: Optional[float]=None, pm: Optional[float]=None):
static PyObject *__pyx_pw_8pysndlib_3clm_153oscil(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static double __pyx_f_8pysndlib_3clm_oscil(struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen, CYTHON_UNUSED int __pyx_skip_dispatch, struct __pyx_opt_args_8pysndlib_3clm_oscil *__pyx_optional_args) {
  PyObject *__pyx_v_fm = ((PyObject *)Py_None);
  PyObject *__pyx_v_pm = ((PyObject *)Py_None);
  double __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("oscil", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_fm = __pyx_optional_args->fm;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_pm = __pyx_optional_args->pm;
      }
    }
  }
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("pysndlib.clm.oscil", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_153oscil(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_152oscil, "\n    return next sample from oscil gen: val = sin(phase + pm); phase += (freq + fm)\n    \n    :param gen: oscil gen\n    :param fm: fm input\n    :param pm: pm input\n    :rtype: float\n    \n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_153oscil = {"oscil", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_153oscil, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_152oscil};
static PyObject *__pyx_pw_8pysndlib_3clm_153oscil(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen = 0;
  PyObject *__pyx_v_fm = 0;
  PyObject *__pyx_v_pm = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("oscil (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_gen,&__pyx_n_s_fm,&__pyx_n_s_pm,0};
    PyObject* values[3] = {0,0,0};
    values[1] = ((PyObject *)Py_None);
    values[2] = ((PyObject *)Py_None);
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_gen)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1721, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_fm);
          if (value) { values[1] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1721, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_pm);
          if (value) { values[2] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1721, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "oscil") < 0)) __PYX_ERR(0, 1721, __pyx_L3_error)
      }
    } else {
      switch (__pyx_nargs) {
        case  3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_gen = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)values[0]);
    __pyx_v_fm = values[1];
    __pyx_v_pm = values[2];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("oscil", 0, 1, 3, __pyx_nargs); __PYX_ERR(0, 1721, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.oscil", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_gen), __pyx_ptype_8pysndlib_3clm_mus_any, 0, "gen", 0))) __PYX_ERR(0, 1721, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pysndlib_3clm_152oscil(__pyx_self, __pyx_v_gen, __pyx_v_fm, __pyx_v_pm);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_152oscil(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen, PyObject *__pyx_v_fm, PyObject *__pyx_v_pm) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("oscil", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2.__pyx_n = 2;
  __pyx_t_2.fm = __pyx_v_fm;
  __pyx_t_2.pm = __pyx_v_pm;
  __pyx_t_1 = __pyx_f_8pysndlib_3clm_oscil(__pyx_v_gen, 0, &__pyx_t_2); if (unlikely(__pyx_t_1 == ((double)-1) && PyErr_Occurred())) __PYX_ERR(0, 1721, __pyx_L1_error)
  __pyx_t_3 = PyFloat_FromDouble(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1721, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_r = __pyx_t_3;
  __pyx_t_3 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("pysndlib.clm.oscil", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__235 = PyTuple_Pack(3, __pyx_n_s_gen, __pyx_n_s_fm, __pyx_n_s_pm); if (unlikely(!__pyx_tuple__235)) __PYX_ERR(0, 1721, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__235);
  __Pyx_GIVEREF(__pyx_tuple__235);
  __pyx_codeobj__236 = (PyObject*)__Pyx_PyCode_New(3, 0, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__235, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_oscil, 1721, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__236)) __PYX_ERR(0, 1721, __pyx_L1_error)
/* … */
  __pyx_t_41 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 1721, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  if (PyDict_SetItem(__pyx_t_41, __pyx_n_s_gen, __pyx_n_s_mus_any) < 0) __PYX_ERR(0, 1721, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_41, __pyx_n_s_fm, __pyx_kp_s_Optional_float) < 0) __PYX_ERR(0, 1721, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_41, __pyx_n_s_pm, __pyx_kp_s_Optional_float) < 0) __PYX_ERR(0, 1721, __pyx_L1_error)
  __pyx_t_37 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_153oscil, 0, __pyx_n_s_oscil, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__236)); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 1721, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_37, __pyx_tuple__237);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_37, __pyx_t_41);
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_oscil, __pyx_t_37) < 0) __PYX_ERR(0, 1721, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
  __pyx_tuple__237 = PyTuple_Pack(2, Py_None, Py_None); if (unlikely(!__pyx_tuple__237)) __PYX_ERR(0, 1721, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__237);
  __Pyx_GIVEREF(__pyx_tuple__237);
/* … */
struct __pyx_opt_args_8pysndlib_3clm_oscil {
  int __pyx_n;
  PyObject *fm;
  PyObject *pm;
};
 1722:     """
 1723:     return next sample from oscil gen: val = sin(phase + pm); phase += (freq + fm)
 1724:     
 1725:     :param gen: oscil gen
 1726:     :param fm: fm input
 1727:     :param pm: pm input
 1728:     :rtype: float
 1729:     
 1730:     """
+1731:     if not (fm or pm):
  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_fm); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 1731, __pyx_L1_error)
  if (!__pyx_t_2) {
  } else {
    __pyx_t_1 = __pyx_t_2;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_pm); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 1731, __pyx_L1_error)
  __pyx_t_1 = __pyx_t_2;
  __pyx_L4_bool_binop_done:;
  __pyx_t_2 = (!__pyx_t_1);
  if (__pyx_t_2) {
/* … */
  }
+1732:         return cclm.mus_oscil_unmodulated(gen._ptr)
    __pyx_r = mus_oscil_unmodulated(__pyx_v_gen->_ptr);
    goto __pyx_L0;
+1733:     elif fm and not pm:
  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_fm); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 1733, __pyx_L1_error)
  if (__pyx_t_1) {
  } else {
    __pyx_t_2 = __pyx_t_1;
    goto __pyx_L6_bool_binop_done;
  }
  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_pm); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 1733, __pyx_L1_error)
  __pyx_t_3 = (!__pyx_t_1);
  __pyx_t_2 = __pyx_t_3;
  __pyx_L6_bool_binop_done:;
  if (__pyx_t_2) {
/* … */
  }
+1734:         return cclm.mus_oscil_fm(gen._ptr, fm)
    __pyx_t_4 = __pyx_PyFloat_AsDouble(__pyx_v_fm); if (unlikely((__pyx_t_4 == ((mus_float_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 1734, __pyx_L1_error)
    __pyx_r = mus_oscil_fm(__pyx_v_gen->_ptr, __pyx_t_4);
    goto __pyx_L0;
 1735:     else:
+1736:         return cclm.mus_oscil(gen._ptr, fm, pm)
  /*else*/ {
    __pyx_t_4 = __pyx_PyFloat_AsDouble(__pyx_v_fm); if (unlikely((__pyx_t_4 == ((mus_float_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 1736, __pyx_L1_error)
    __pyx_t_5 = __pyx_PyFloat_AsDouble(__pyx_v_pm); if (unlikely((__pyx_t_5 == ((mus_float_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 1736, __pyx_L1_error)
    __pyx_r = mus_oscil(__pyx_v_gen->_ptr, __pyx_t_4, __pyx_t_5);
    goto __pyx_L0;
  }
 1737: 
+1738: cpdef bint is_oscil(gen: mus_any):
static PyObject *__pyx_pw_8pysndlib_3clm_155is_oscil(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static int __pyx_f_8pysndlib_3clm_is_oscil(struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen, CYTHON_UNUSED int __pyx_skip_dispatch) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_oscil", 0);
/* … */
  /* function exit code */
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_155is_oscil(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_154is_oscil, "\n    returns True if gen is an oscil\n    \n    :param gen: oscil gen\n    :rtype: bool\n    \n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_155is_oscil = {"is_oscil", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_155is_oscil, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_154is_oscil};
static PyObject *__pyx_pw_8pysndlib_3clm_155is_oscil(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_oscil (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_gen,0};
    PyObject* values[1] = {0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_gen)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1738, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "is_oscil") < 0)) __PYX_ERR(0, 1738, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
    }
    __pyx_v_gen = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)values[0]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("is_oscil", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 1738, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.is_oscil", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_gen), __pyx_ptype_8pysndlib_3clm_mus_any, 0, "gen", 0))) __PYX_ERR(0, 1738, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pysndlib_3clm_154is_oscil(__pyx_self, __pyx_v_gen);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_154is_oscil(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_oscil", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_8pysndlib_3clm_is_oscil(__pyx_v_gen, 0); if (unlikely(__pyx_t_1 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1738, __pyx_L1_error)
  __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1738, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pysndlib.clm.is_oscil", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_37 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 1738, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  if (PyDict_SetItem(__pyx_t_37, __pyx_n_s_gen, __pyx_n_s_mus_any) < 0) __PYX_ERR(0, 1738, __pyx_L1_error)
  __pyx_t_41 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_155is_oscil, 0, __pyx_n_s_is_oscil, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__238)); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 1738, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_41, __pyx_t_37);
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_is_oscil, __pyx_t_41) < 0) __PYX_ERR(0, 1738, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
/* … */
  __pyx_codeobj__238 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__46, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_is_oscil, 1738, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__238)) __PYX_ERR(0, 1738, __pyx_L1_error)
 1739:     """
 1740:     returns True if gen is an oscil
 1741:     
 1742:     :param gen: oscil gen
 1743:     :rtype: bool
 1744:     
 1745:     """
+1746:     return cclm.mus_is_oscil(gen._ptr)
  __pyx_r = mus_is_oscil(__pyx_v_gen->_ptr);
  goto __pyx_L0;
 1747: 
 1748: # ---------------- oscil-bank ---------------- #
 1749: 
+1750: cpdef mus_any make_oscil_bank(freqs, phases, amps=None, stable: Optional[bool]=False):
static PyObject *__pyx_pw_8pysndlib_3clm_157make_oscil_bank(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_f_8pysndlib_3clm_make_oscil_bank(PyObject *__pyx_v_freqs, PyObject *__pyx_v_phases, CYTHON_UNUSED int __pyx_skip_dispatch, struct __pyx_opt_args_8pysndlib_3clm_make_oscil_bank *__pyx_optional_args) {
  PyObject *__pyx_v_amps = ((PyObject *)Py_None);
  PyObject *__pyx_v_stable = ((PyObject *)Py_False);
  __Pyx_memviewslice __pyx_v_freqs_view = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_phases_view = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_amps_view = { 0, 0, { 0 }, { 0 }, { 0 } };
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen = NULL;
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("make_oscil_bank", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_amps = __pyx_optional_args->amps;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_stable = __pyx_optional_args->stable;
      }
    }
  }
  __Pyx_INCREF(__pyx_v_freqs);
  __Pyx_INCREF(__pyx_v_phases);
  __Pyx_INCREF(__pyx_v_amps);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __PYX_XCLEAR_MEMVIEW(&__pyx_t_1, 1);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_AddTraceback("pysndlib.clm.make_oscil_bank", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __PYX_XCLEAR_MEMVIEW(&__pyx_v_freqs_view, 1);
  __PYX_XCLEAR_MEMVIEW(&__pyx_v_phases_view, 1);
  __PYX_XCLEAR_MEMVIEW(&__pyx_v_amps_view, 1);
  __Pyx_XDECREF((PyObject *)__pyx_v_gen);
  __Pyx_XDECREF(__pyx_v_freqs);
  __Pyx_XDECREF(__pyx_v_phases);
  __Pyx_XDECREF(__pyx_v_amps);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_157make_oscil_bank(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_156make_oscil_bank, "\n    return a new oscil_bank generator. (freqs in radians)\n    \n    :param freqs: list or np.ndarray of frequencies in radians\n    :param phases: list or np.ndarray of initial phases in radians\n    :param stable:  if it is true, oscil_bank can assume that the frequency. this is not operative\n    :return: oscil_bank gen\n    :rtype: mus_any\n    \n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_157make_oscil_bank = {"make_oscil_bank", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_157make_oscil_bank, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_156make_oscil_bank};
static PyObject *__pyx_pw_8pysndlib_3clm_157make_oscil_bank(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_freqs = 0;
  PyObject *__pyx_v_phases = 0;
  PyObject *__pyx_v_amps = 0;
  PyObject *__pyx_v_stable = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("make_oscil_bank (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_freqs,&__pyx_n_s_phases,&__pyx_n_s_amps,&__pyx_n_s_stable,0};
    PyObject* values[4] = {0,0,0,0};
    values[2] = ((PyObject *)Py_None);
    values[3] = ((PyObject *)Py_False);
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  4: values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_freqs)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1750, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_phases)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1750, __pyx_L3_error)
        else {
          __Pyx_RaiseArgtupleInvalid("make_oscil_bank", 0, 2, 4, 1); __PYX_ERR(0, 1750, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_amps);
          if (value) { values[2] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1750, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_stable);
          if (value) { values[3] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1750, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "make_oscil_bank") < 0)) __PYX_ERR(0, 1750, __pyx_L3_error)
      }
    } else {
      switch (__pyx_nargs) {
        case  4: values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_freqs = values[0];
    __pyx_v_phases = values[1];
    __pyx_v_amps = values[2];
    __pyx_v_stable = values[3];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("make_oscil_bank", 0, 2, 4, __pyx_nargs); __PYX_ERR(0, 1750, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.make_oscil_bank", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pysndlib_3clm_156make_oscil_bank(__pyx_self, __pyx_v_freqs, __pyx_v_phases, __pyx_v_amps, __pyx_v_stable);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_156make_oscil_bank(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_freqs, PyObject *__pyx_v_phases, PyObject *__pyx_v_amps, PyObject *__pyx_v_stable) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("make_oscil_bank", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2.__pyx_n = 2;
  __pyx_t_2.amps = __pyx_v_amps;
  __pyx_t_2.stable = __pyx_v_stable;
  __pyx_t_1 = ((PyObject *)__pyx_f_8pysndlib_3clm_make_oscil_bank(__pyx_v_freqs, __pyx_v_phases, 0, &__pyx_t_2)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1750, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pysndlib.clm.make_oscil_bank", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__239 = PyTuple_Pack(4, __pyx_n_s_freqs, __pyx_n_s_phases, __pyx_n_s_amps, __pyx_n_s_stable); if (unlikely(!__pyx_tuple__239)) __PYX_ERR(0, 1750, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__239);
  __Pyx_GIVEREF(__pyx_tuple__239);
  __pyx_codeobj__240 = (PyObject*)__Pyx_PyCode_New(4, 0, 0, 4, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__239, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_make_oscil_bank, 1750, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__240)) __PYX_ERR(0, 1750, __pyx_L1_error)
/* … */
  __pyx_t_41 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 1750, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  if (PyDict_SetItem(__pyx_t_41, __pyx_n_s_stable, __pyx_kp_s_Optional_bool) < 0) __PYX_ERR(0, 1750, __pyx_L1_error)
  __pyx_t_37 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_157make_oscil_bank, 0, __pyx_n_s_make_oscil_bank, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__240)); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 1750, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_37, __pyx_tuple__241);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_37, __pyx_t_41);
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_make_oscil_bank, __pyx_t_37) < 0) __PYX_ERR(0, 1750, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
  __pyx_tuple__241 = PyTuple_Pack(2, Py_None, Py_False); if (unlikely(!__pyx_tuple__241)) __PYX_ERR(0, 1750, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__241);
  __Pyx_GIVEREF(__pyx_tuple__241);
/* … */
struct __pyx_opt_args_8pysndlib_3clm_make_oscil_bank {
  int __pyx_n;
  PyObject *amps;
  PyObject *stable;
};
 1751:     """
 1752:     return a new oscil_bank generator. (freqs in radians)
 1753:     
 1754:     :param freqs: list or np.ndarray of frequencies in radians
 1755:     :param phases: list or np.ndarray of initial phases in radians
 1756:     :param stable:  if it is true, oscil_bank can assume that the frequency. this is not operative
 1757:     :return: oscil_bank gen
 1758:     :rtype: mus_any
 1759:     
 1760:     """
+1761:     cdef cclm.mus_float_t [:] freqs_view = None
  __pyx_t_1 = __Pyx_PyObject_to_MemoryviewSlice_ds_nn_mus_float_t(Py_None, PyBUF_WRITABLE); if (unlikely(!__pyx_t_1.memview)) __PYX_ERR(0, 1761, __pyx_L1_error)
  __pyx_v_freqs_view = __pyx_t_1;
  __pyx_t_1.memview = NULL;
  __pyx_t_1.data = NULL;
+1762:     cdef cclm.mus_float_t [:] phases_view = None
  __pyx_t_1 = __Pyx_PyObject_to_MemoryviewSlice_ds_nn_mus_float_t(Py_None, PyBUF_WRITABLE); if (unlikely(!__pyx_t_1.memview)) __PYX_ERR(0, 1762, __pyx_L1_error)
  __pyx_v_phases_view = __pyx_t_1;
  __pyx_t_1.memview = NULL;
  __pyx_t_1.data = NULL;
+1763:     cdef cclm.mus_float_t [:] amps_view = None
  __pyx_t_1 = __Pyx_PyObject_to_MemoryviewSlice_ds_nn_mus_float_t(Py_None, PyBUF_WRITABLE); if (unlikely(!__pyx_t_1.memview)) __PYX_ERR(0, 1763, __pyx_L1_error)
  __pyx_v_amps_view = __pyx_t_1;
  __pyx_t_1.memview = NULL;
  __pyx_t_1.data = NULL;
 1764: 
+1765:     if isinstance(freqs, list):
  __pyx_t_2 = PyList_Check(__pyx_v_freqs); 
  if (__pyx_t_2) {
/* … */
  }
+1766:         freqs = np.array(freqs, dtype=np.double)
    __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1766, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_array); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1766, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1766, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_INCREF(__pyx_v_freqs);
    __Pyx_GIVEREF(__pyx_v_freqs);
    PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_freqs);
    __pyx_t_5 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1766, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_np); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1766, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_double); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1766, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_dtype, __pyx_t_7) < 0) __PYX_ERR(0, 1766, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_3, __pyx_t_5); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1766, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF_SET(__pyx_v_freqs, __pyx_t_7);
    __pyx_t_7 = 0;
+1767:     if isinstance(phases, list):
  __pyx_t_2 = PyList_Check(__pyx_v_phases); 
  if (__pyx_t_2) {
/* … */
  }
+1768:         phases = np.array(phases, dtype=np.double)
    __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_np); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1768, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_array); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1768, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __pyx_t_7 = PyTuple_New(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1768, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_INCREF(__pyx_v_phases);
    __Pyx_GIVEREF(__pyx_v_phases);
    PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_v_phases);
    __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1768, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1768, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_double); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1768, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_dtype, __pyx_t_6) < 0) __PYX_ERR(0, 1768, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_7, __pyx_t_3); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1768, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF_SET(__pyx_v_phases, __pyx_t_6);
    __pyx_t_6 = 0;
 1769: 
+1770:     check_ndim(freqs)
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_check_ndim); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1770, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_7 = NULL;
  __pyx_t_8 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_3);
    if (likely(__pyx_t_7)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_7);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_3, function);
      __pyx_t_8 = 1;
    }
  }
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_v_freqs};
    __pyx_t_6 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_8, 1+__pyx_t_8);
    __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
    if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1770, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  }
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+1771:     check_ndim(phases)
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_check_ndim); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1771, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_7 = NULL;
  __pyx_t_8 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_3);
    if (likely(__pyx_t_7)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_7);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_3, function);
      __pyx_t_8 = 1;
    }
  }
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_v_phases};
    __pyx_t_6 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_8, 1+__pyx_t_8);
    __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
    if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1771, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  }
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+1772:     compare_shapes(freqs, phases)
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_compare_shapes); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1772, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_7 = NULL;
  __pyx_t_8 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_3);
    if (likely(__pyx_t_7)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_7);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_3, function);
      __pyx_t_8 = 1;
    }
  }
  {
    PyObject *__pyx_callargs[3] = {__pyx_t_7, __pyx_v_freqs, __pyx_v_phases};
    __pyx_t_6 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_8, 2+__pyx_t_8);
    __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
    if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1772, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  }
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
 1773: 
+1774:     freqs_view = freqs
  __pyx_t_1 = __Pyx_PyObject_to_MemoryviewSlice_ds_nn_mus_float_t(__pyx_v_freqs, PyBUF_WRITABLE); if (unlikely(!__pyx_t_1.memview)) __PYX_ERR(0, 1774, __pyx_L1_error)
  __PYX_XCLEAR_MEMVIEW(&__pyx_v_freqs_view, 1);
  __pyx_v_freqs_view = __pyx_t_1;
  __pyx_t_1.memview = NULL;
  __pyx_t_1.data = NULL;
+1775:     phases_view = phases
  __pyx_t_1 = __Pyx_PyObject_to_MemoryviewSlice_ds_nn_mus_float_t(__pyx_v_phases, PyBUF_WRITABLE); if (unlikely(!__pyx_t_1.memview)) __PYX_ERR(0, 1775, __pyx_L1_error)
  __PYX_XCLEAR_MEMVIEW(&__pyx_v_phases_view, 1);
  __pyx_v_phases_view = __pyx_t_1;
  __pyx_t_1.memview = NULL;
  __pyx_t_1.data = NULL;
 1776: 
+1777:     if amps is not None:
  __pyx_t_2 = (__pyx_v_amps != Py_None);
  if (__pyx_t_2) {
/* … */
    goto __pyx_L5;
  }
+1778:         if isinstance(amps, list):
    __pyx_t_2 = PyList_Check(__pyx_v_amps); 
    if (__pyx_t_2) {
/* … */
    }
+1779:             amps = np.array(amps, dtype=np.double)
      __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_np); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1779, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_array); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1779, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1779, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_INCREF(__pyx_v_amps);
      __Pyx_GIVEREF(__pyx_v_amps);
      PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_v_amps);
      __pyx_t_7 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1779, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_np); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1779, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_double); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1779, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_dtype, __pyx_t_4) < 0) __PYX_ERR(0, 1779, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_6, __pyx_t_7); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1779, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      __Pyx_DECREF_SET(__pyx_v_amps, __pyx_t_4);
      __pyx_t_4 = 0;
+1780:         check_ndim(amps)
    __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_check_ndim); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1780, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __pyx_t_6 = NULL;
    __pyx_t_8 = 0;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_7))) {
      __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_7);
      if (likely(__pyx_t_6)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7);
        __Pyx_INCREF(__pyx_t_6);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_7, function);
        __pyx_t_8 = 1;
      }
    }
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_v_amps};
      __pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_7, __pyx_callargs+1-__pyx_t_8, 1+__pyx_t_8);
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1780, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    }
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+1781:         amps_view = amps
    __pyx_t_1 = __Pyx_PyObject_to_MemoryviewSlice_ds_nn_mus_float_t(__pyx_v_amps, PyBUF_WRITABLE); if (unlikely(!__pyx_t_1.memview)) __PYX_ERR(0, 1781, __pyx_L1_error)
    __PYX_XCLEAR_MEMVIEW(&__pyx_v_amps_view, 1);
    __pyx_v_amps_view = __pyx_t_1;
    __pyx_t_1.memview = NULL;
    __pyx_t_1.data = NULL;
+1782:         gen = mus_any.from_ptr(cclm.mus_make_oscil_bank(len(freqs), &freqs_view[0], &phases_view[0], &amps_view[0], stable))
    __pyx_t_9 = PyObject_Length(__pyx_v_freqs); if (unlikely(__pyx_t_9 == ((Py_ssize_t)-1))) __PYX_ERR(0, 1782, __pyx_L1_error)
    __pyx_t_10 = 0;
    __pyx_t_8 = -1;
    if (__pyx_t_10 < 0) {
      __pyx_t_10 += __pyx_v_freqs_view.shape[0];
      if (unlikely(__pyx_t_10 < 0)) __pyx_t_8 = 0;
    } else if (unlikely(__pyx_t_10 >= __pyx_v_freqs_view.shape[0])) __pyx_t_8 = 0;
    if (unlikely(__pyx_t_8 != -1)) {
      __Pyx_RaiseBufferIndexError(__pyx_t_8);
      __PYX_ERR(0, 1782, __pyx_L1_error)
    }
    __pyx_t_11 = 0;
    __pyx_t_8 = -1;
    if (__pyx_t_11 < 0) {
      __pyx_t_11 += __pyx_v_phases_view.shape[0];
      if (unlikely(__pyx_t_11 < 0)) __pyx_t_8 = 0;
    } else if (unlikely(__pyx_t_11 >= __pyx_v_phases_view.shape[0])) __pyx_t_8 = 0;
    if (unlikely(__pyx_t_8 != -1)) {
      __Pyx_RaiseBufferIndexError(__pyx_t_8);
      __PYX_ERR(0, 1782, __pyx_L1_error)
    }
    __pyx_t_12 = 0;
    __pyx_t_8 = -1;
    if (__pyx_t_12 < 0) {
      __pyx_t_12 += __pyx_v_amps_view.shape[0];
      if (unlikely(__pyx_t_12 < 0)) __pyx_t_8 = 0;
    } else if (unlikely(__pyx_t_12 >= __pyx_v_amps_view.shape[0])) __pyx_t_8 = 0;
    if (unlikely(__pyx_t_8 != -1)) {
      __Pyx_RaiseBufferIndexError(__pyx_t_8);
      __PYX_ERR(0, 1782, __pyx_L1_error)
    }
    __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_stable); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1782, __pyx_L1_error)
    __pyx_t_4 = ((PyObject *)__pyx_vtabptr_8pysndlib_3clm_mus_any->from_ptr(mus_make_oscil_bank(__pyx_t_9, (&(*((mus_float_t *) ( /* dim=0 */ (__pyx_v_freqs_view.data + __pyx_t_10 * __pyx_v_freqs_view.strides[0]) )))), (&(*((mus_float_t *) ( /* dim=0 */ (__pyx_v_phases_view.data + __pyx_t_11 * __pyx_v_phases_view.strides[0]) )))), (&(*((mus_float_t *) ( /* dim=0 */ (__pyx_v_amps_view.data + __pyx_t_12 * __pyx_v_amps_view.strides[0]) )))), __pyx_t_2), NULL)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1782, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_v_gen = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)__pyx_t_4);
    __pyx_t_4 = 0;
 1783:     else:
+1784:         gen = mus_any.from_ptr(cclm.mus_make_oscil_bank(len(freqs), &freqs_view[0], &phases_view[0], NULL, stable))
  /*else*/ {
    __pyx_t_9 = PyObject_Length(__pyx_v_freqs); if (unlikely(__pyx_t_9 == ((Py_ssize_t)-1))) __PYX_ERR(0, 1784, __pyx_L1_error)
    __pyx_t_12 = 0;
    __pyx_t_8 = -1;
    if (__pyx_t_12 < 0) {
      __pyx_t_12 += __pyx_v_freqs_view.shape[0];
      if (unlikely(__pyx_t_12 < 0)) __pyx_t_8 = 0;
    } else if (unlikely(__pyx_t_12 >= __pyx_v_freqs_view.shape[0])) __pyx_t_8 = 0;
    if (unlikely(__pyx_t_8 != -1)) {
      __Pyx_RaiseBufferIndexError(__pyx_t_8);
      __PYX_ERR(0, 1784, __pyx_L1_error)
    }
    __pyx_t_11 = 0;
    __pyx_t_8 = -1;
    if (__pyx_t_11 < 0) {
      __pyx_t_11 += __pyx_v_phases_view.shape[0];
      if (unlikely(__pyx_t_11 < 0)) __pyx_t_8 = 0;
    } else if (unlikely(__pyx_t_11 >= __pyx_v_phases_view.shape[0])) __pyx_t_8 = 0;
    if (unlikely(__pyx_t_8 != -1)) {
      __Pyx_RaiseBufferIndexError(__pyx_t_8);
      __PYX_ERR(0, 1784, __pyx_L1_error)
    }
    __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_stable); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1784, __pyx_L1_error)
    __pyx_t_4 = ((PyObject *)__pyx_vtabptr_8pysndlib_3clm_mus_any->from_ptr(mus_make_oscil_bank(__pyx_t_9, (&(*((mus_float_t *) ( /* dim=0 */ (__pyx_v_freqs_view.data + __pyx_t_12 * __pyx_v_freqs_view.strides[0]) )))), (&(*((mus_float_t *) ( /* dim=0 */ (__pyx_v_phases_view.data + __pyx_t_11 * __pyx_v_phases_view.strides[0]) )))), NULL, __pyx_t_2), NULL)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1784, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_v_gen = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)__pyx_t_4);
    __pyx_t_4 = 0;
  }
  __pyx_L5:;
 1785: 
+1786:     gen.cache_extend([freqs, phases, amps])
  __pyx_t_4 = PyList_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1786, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_INCREF(__pyx_v_freqs);
  __Pyx_GIVEREF(__pyx_v_freqs);
  PyList_SET_ITEM(__pyx_t_4, 0, __pyx_v_freqs);
  __Pyx_INCREF(__pyx_v_phases);
  __Pyx_GIVEREF(__pyx_v_phases);
  PyList_SET_ITEM(__pyx_t_4, 1, __pyx_v_phases);
  __Pyx_INCREF(__pyx_v_amps);
  __Pyx_GIVEREF(__pyx_v_amps);
  PyList_SET_ITEM(__pyx_t_4, 2, __pyx_v_amps);
  __pyx_t_7 = ((struct __pyx_vtabstruct_8pysndlib_3clm_mus_any *)__pyx_v_gen->__pyx_vtab)->cache_extend(__pyx_v_gen, __pyx_t_4, 0); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1786, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+1787:     return gen
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __Pyx_INCREF((PyObject *)__pyx_v_gen);
  __pyx_r = __pyx_v_gen;
  goto __pyx_L0;
 1788: 
+1789: cpdef cython.double oscil_bank(gen: mus_any):
static PyObject *__pyx_pw_8pysndlib_3clm_159oscil_bank(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static double __pyx_f_8pysndlib_3clm_oscil_bank(struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen, CYTHON_UNUSED int __pyx_skip_dispatch) {
  double __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("oscil_bank", 0);
/* … */
  /* function exit code */
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_159oscil_bank(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_158oscil_bank, "\n    sum an array of oscils\n    \n    :param gen: oscil_bank gen\n    :rtype: float\n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_159oscil_bank = {"oscil_bank", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_159oscil_bank, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_158oscil_bank};
static PyObject *__pyx_pw_8pysndlib_3clm_159oscil_bank(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("oscil_bank (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_gen,0};
    PyObject* values[1] = {0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_gen)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1789, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "oscil_bank") < 0)) __PYX_ERR(0, 1789, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
    }
    __pyx_v_gen = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)values[0]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("oscil_bank", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 1789, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.oscil_bank", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_gen), __pyx_ptype_8pysndlib_3clm_mus_any, 0, "gen", 0))) __PYX_ERR(0, 1789, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pysndlib_3clm_158oscil_bank(__pyx_self, __pyx_v_gen);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_158oscil_bank(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("oscil_bank", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_8pysndlib_3clm_oscil_bank(__pyx_v_gen, 0); if (unlikely(__pyx_t_1 == ((double)-1) && PyErr_Occurred())) __PYX_ERR(0, 1789, __pyx_L1_error)
  __pyx_t_2 = PyFloat_FromDouble(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1789, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pysndlib.clm.oscil_bank", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_37 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 1789, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  if (PyDict_SetItem(__pyx_t_37, __pyx_n_s_gen, __pyx_n_s_mus_any) < 0) __PYX_ERR(0, 1789, __pyx_L1_error)
  __pyx_t_41 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_159oscil_bank, 0, __pyx_n_s_oscil_bank, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__242)); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 1789, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_41, __pyx_t_37);
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_oscil_bank, __pyx_t_41) < 0) __PYX_ERR(0, 1789, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
/* … */
  __pyx_codeobj__242 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__46, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_oscil_bank, 1789, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__242)) __PYX_ERR(0, 1789, __pyx_L1_error)
 1790:     """
 1791:     sum an array of oscils
 1792:     
 1793:     :param gen: oscil_bank gen
 1794:     :rtype: float
 1795:     """
+1796:     return cclm.mus_oscil_bank(gen._ptr)
  __pyx_r = mus_oscil_bank(__pyx_v_gen->_ptr);
  goto __pyx_L0;
 1797: 
+1798: cpdef bint is_oscil_bank(gen: mus_any):
static PyObject *__pyx_pw_8pysndlib_3clm_161is_oscil_bank(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static int __pyx_f_8pysndlib_3clm_is_oscil_bank(struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen, CYTHON_UNUSED int __pyx_skip_dispatch) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_oscil_bank", 0);
/* … */
  /* function exit code */
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_161is_oscil_bank(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_160is_oscil_bank, "\n    returns True if gen is an oscil_bank\n    \n    :param gen: gen\n    :rtype: bool\n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_161is_oscil_bank = {"is_oscil_bank", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_161is_oscil_bank, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_160is_oscil_bank};
static PyObject *__pyx_pw_8pysndlib_3clm_161is_oscil_bank(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_oscil_bank (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_gen,0};
    PyObject* values[1] = {0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_gen)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1798, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "is_oscil_bank") < 0)) __PYX_ERR(0, 1798, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
    }
    __pyx_v_gen = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)values[0]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("is_oscil_bank", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 1798, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.is_oscil_bank", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_gen), __pyx_ptype_8pysndlib_3clm_mus_any, 0, "gen", 0))) __PYX_ERR(0, 1798, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pysndlib_3clm_160is_oscil_bank(__pyx_self, __pyx_v_gen);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_160is_oscil_bank(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_oscil_bank", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_8pysndlib_3clm_is_oscil_bank(__pyx_v_gen, 0); if (unlikely(__pyx_t_1 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1798, __pyx_L1_error)
  __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1798, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pysndlib.clm.is_oscil_bank", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_41 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 1798, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  if (PyDict_SetItem(__pyx_t_41, __pyx_n_s_gen, __pyx_n_s_mus_any) < 0) __PYX_ERR(0, 1798, __pyx_L1_error)
  __pyx_t_37 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_161is_oscil_bank, 0, __pyx_n_s_is_oscil_bank, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__243)); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 1798, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_37, __pyx_t_41);
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_is_oscil_bank, __pyx_t_37) < 0) __PYX_ERR(0, 1798, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
/* … */
  __pyx_codeobj__243 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__46, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_is_oscil_bank, 1798, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__243)) __PYX_ERR(0, 1798, __pyx_L1_error)
 1799:     """
 1800:     returns True if gen is an oscil_bank
 1801:     
 1802:     :param gen: gen
 1803:     :rtype: bool
 1804:     """
+1805:     return cclm.mus_is_oscil_bank(gen._ptr)
  __pyx_r = mus_is_oscil_bank(__pyx_v_gen->_ptr);
  goto __pyx_L0;
 1806: 
 1807: 
 1808: 
 1809: # TODO: nned to check if envelope is valid otherwise it may segfault
 1810: # ---------------- env ---------------- #
+1811: cpdef mus_any make_env(envelope, scaler: Optional[float]=1.0, duration: Optional[float]=1.0, offset: Optional[float]=0.0, base: Optional[float]=1.0, length: Optional[int]=0):
static PyObject *__pyx_pw_8pysndlib_3clm_163make_env(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_f_8pysndlib_3clm_make_env(PyObject *__pyx_v_envelope, CYTHON_UNUSED int __pyx_skip_dispatch, struct __pyx_opt_args_8pysndlib_3clm_make_env *__pyx_optional_args) {
  PyObject *__pyx_v_scaler = ((PyObject *)__pyx_float_1_0);
  PyObject *__pyx_v_duration = ((PyObject *)__pyx_float_1_0);
  PyObject *__pyx_v_offset = ((PyObject *)__pyx_float_0_0);
  PyObject *__pyx_v_base = ((PyObject *)__pyx_float_1_0);
  PyObject *__pyx_v_length = ((PyObject *)__pyx_int_0);
  __Pyx_memviewslice __pyx_v_envelope_view = { 0, 0, { 0 }, { 0 }, { 0 } };
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen = NULL;
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("make_env", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_scaler = __pyx_optional_args->scaler;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_duration = __pyx_optional_args->duration;
        if (__pyx_optional_args->__pyx_n > 2) {
          __pyx_v_offset = __pyx_optional_args->offset;
          if (__pyx_optional_args->__pyx_n > 3) {
            __pyx_v_base = __pyx_optional_args->base;
            if (__pyx_optional_args->__pyx_n > 4) {
              __pyx_v_length = __pyx_optional_args->length;
            }
          }
        }
      }
    }
  }
  __Pyx_INCREF(__pyx_v_envelope);
  __Pyx_INCREF(__pyx_v_duration);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_8);
  __PYX_XCLEAR_MEMVIEW(&__pyx_t_9, 1);
  __Pyx_AddTraceback("pysndlib.clm.make_env", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __PYX_XCLEAR_MEMVIEW(&__pyx_v_envelope_view, 1);
  __Pyx_XDECREF((PyObject *)__pyx_v_gen);
  __Pyx_XDECREF(__pyx_v_envelope);
  __Pyx_XDECREF(__pyx_v_duration);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_163make_env(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_162make_env, "\n    return a new envelope generator.  'envelope' is a list/array of break-point pairs. to create the\n    envelope, these points are offset by 'offset', scaled by 'scaler', and mapped over the time interval\n    defined by either 'duration' (seconds) or 'length' (samples).  if 'base' is 1.0, the connecting segments\n    are linear, if 0.0 you get a step function, and anything else produces an exponential connecting segment.\n    \n    :param envelope: list or np.ndarry of breakpoint pairs\n    :param scaler: scaler on every y value (before offset is added)\n    :param duration: duration \\in seconds\n    :param offset: value added to every y value\n    :param base: type of connecting line between break-points\n    :param length:  duration \\in samples\n    :result: env gen\n    :rtype: mus_any\n\n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_163make_env = {"make_env", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_163make_env, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_162make_env};
static PyObject *__pyx_pw_8pysndlib_3clm_163make_env(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_envelope = 0;
  PyObject *__pyx_v_scaler = 0;
  PyObject *__pyx_v_duration = 0;
  PyObject *__pyx_v_offset = 0;
  PyObject *__pyx_v_base = 0;
  PyObject *__pyx_v_length = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("make_env (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_envelope,&__pyx_n_s_scaler,&__pyx_n_s_duration,&__pyx_n_s_offset,&__pyx_n_s_base,&__pyx_n_s_length,0};
    PyObject* values[6] = {0,0,0,0,0,0};
    values[1] = ((PyObject *)__pyx_float_1_0);
    values[2] = ((PyObject *)__pyx_float_1_0);
    values[3] = ((PyObject *)__pyx_float_0_0);
    values[4] = ((PyObject *)__pyx_float_1_0);
    values[5] = ((PyObject *)__pyx_int_0);
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  6: values[5] = __Pyx_Arg_FASTCALL(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = __Pyx_Arg_FASTCALL(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_envelope)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1811, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_scaler);
          if (value) { values[1] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1811, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_duration);
          if (value) { values[2] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1811, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_offset);
          if (value) { values[3] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1811, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_base);
          if (value) { values[4] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1811, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  5:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_length);
          if (value) { values[5] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1811, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "make_env") < 0)) __PYX_ERR(0, 1811, __pyx_L3_error)
      }
    } else {
      switch (__pyx_nargs) {
        case  6: values[5] = __Pyx_Arg_FASTCALL(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = __Pyx_Arg_FASTCALL(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_envelope = values[0];
    __pyx_v_scaler = values[1];
    __pyx_v_duration = values[2];
    __pyx_v_offset = values[3];
    __pyx_v_base = values[4];
    __pyx_v_length = values[5];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("make_env", 0, 1, 6, __pyx_nargs); __PYX_ERR(0, 1811, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.make_env", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pysndlib_3clm_162make_env(__pyx_self, __pyx_v_envelope, __pyx_v_scaler, __pyx_v_duration, __pyx_v_offset, __pyx_v_base, __pyx_v_length);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_162make_env(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_envelope, PyObject *__pyx_v_scaler, PyObject *__pyx_v_duration, PyObject *__pyx_v_offset, PyObject *__pyx_v_base, PyObject *__pyx_v_length) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("make_env", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2.__pyx_n = 5;
  __pyx_t_2.scaler = __pyx_v_scaler;
  __pyx_t_2.duration = __pyx_v_duration;
  __pyx_t_2.offset = __pyx_v_offset;
  __pyx_t_2.base = __pyx_v_base;
  __pyx_t_2.length = __pyx_v_length;
  __pyx_t_1 = ((PyObject *)__pyx_f_8pysndlib_3clm_make_env(__pyx_v_envelope, 0, &__pyx_t_2)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1811, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pysndlib.clm.make_env", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__244 = PyTuple_Pack(6, __pyx_n_s_envelope, __pyx_n_s_scaler, __pyx_n_s_duration, __pyx_n_s_offset, __pyx_n_s_base, __pyx_n_s_length); if (unlikely(!__pyx_tuple__244)) __PYX_ERR(0, 1811, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__244);
  __Pyx_GIVEREF(__pyx_tuple__244);
  __pyx_codeobj__245 = (PyObject*)__Pyx_PyCode_New(6, 0, 0, 6, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__244, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_make_env, 1811, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__245)) __PYX_ERR(0, 1811, __pyx_L1_error)
/* … */
  __pyx_t_37 = __Pyx_PyDict_NewPresized(5); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 1811, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  if (PyDict_SetItem(__pyx_t_37, __pyx_n_s_scaler, __pyx_kp_s_Optional_float) < 0) __PYX_ERR(0, 1811, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_37, __pyx_n_s_duration, __pyx_kp_s_Optional_float) < 0) __PYX_ERR(0, 1811, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_37, __pyx_n_s_offset, __pyx_kp_s_Optional_float) < 0) __PYX_ERR(0, 1811, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_37, __pyx_n_s_base, __pyx_kp_s_Optional_float) < 0) __PYX_ERR(0, 1811, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_37, __pyx_n_s_length, __pyx_kp_s_Optional_int) < 0) __PYX_ERR(0, 1811, __pyx_L1_error)
  __pyx_t_41 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_163make_env, 0, __pyx_n_s_make_env, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__245)); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 1811, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_41, __pyx_tuple__246);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_41, __pyx_t_37);
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_make_env, __pyx_t_41) < 0) __PYX_ERR(0, 1811, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
  __pyx_tuple__246 = PyTuple_Pack(5, __pyx_float_1_0, __pyx_float_1_0, __pyx_float_0_0, __pyx_float_1_0, __pyx_int_0); if (unlikely(!__pyx_tuple__246)) __PYX_ERR(0, 1811, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__246);
  __Pyx_GIVEREF(__pyx_tuple__246);
/* … */
struct __pyx_opt_args_8pysndlib_3clm_make_env {
  int __pyx_n;
  PyObject *scaler;
  PyObject *duration;
  PyObject *offset;
  PyObject *base;
  PyObject *length;
};
 1812:     """
 1813:     return a new envelope generator.  'envelope' is a list/array of break-point pairs. to create the
 1814:     envelope, these points are offset by 'offset', scaled by 'scaler', and mapped over the time interval
 1815:     defined by either 'duration' (seconds) or 'length' (samples).  if 'base' is 1.0, the connecting segments
 1816:     are linear, if 0.0 you get a step function, and anything else produces an exponential connecting segment.
 1817:     
 1818:     :param envelope: list or np.ndarry of breakpoint pairs
 1819:     :param scaler: scaler on every y value (before offset is added)
 1820:     :param duration: duration \in seconds
 1821:     :param offset: value added to every y value
 1822:     :param base: type of connecting line between break-points
 1823:     :param length:  duration \in samples
 1824:     :result: env gen
 1825:     :rtype: mus_any
 1826: 
 1827:     """
 1828: 
+1829:     check_range('duration', duration, 0.0, None)
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_check_range); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1829, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  __pyx_t_4 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
      __pyx_t_4 = 1;
    }
  }
  {
    PyObject *__pyx_callargs[5] = {__pyx_t_3, __pyx_n_s_duration, __pyx_v_duration, __pyx_float_0_0, Py_None};
    __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 4+__pyx_t_4);
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1829, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 1830: 
+1831:     if length > 0:
  __pyx_t_1 = PyObject_RichCompare(__pyx_v_length, __pyx_int_0, Py_GT); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1831, __pyx_L1_error)
  __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 1831, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_5) {
/* … */
  }
+1832:         duration = samples2seconds(length)
    __pyx_t_6 = __pyx_f_8pysndlib_3clm_samples2seconds(__pyx_v_length, 0); if (unlikely(__pyx_t_6 == ((double)-1) && PyErr_Occurred())) __PYX_ERR(0, 1832, __pyx_L1_error)
    __pyx_t_1 = PyFloat_FromDouble(__pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1832, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF_SET(__pyx_v_duration, __pyx_t_1);
    __pyx_t_1 = 0;
 1833: 
+1834:     if isinstance(envelope, list):
  __pyx_t_5 = PyList_Check(__pyx_v_envelope); 
  if (__pyx_t_5) {
/* … */
  }
+1835:         envelope = np.array(envelope, dtype=np.double)
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1835, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_array); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1835, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1835, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_INCREF(__pyx_v_envelope);
    __Pyx_GIVEREF(__pyx_v_envelope);
    PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_envelope);
    __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1835, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_np); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1835, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_double); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1835, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_dtype, __pyx_t_8) < 0) __PYX_ERR(0, 1835, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_1, __pyx_t_3); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1835, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF_SET(__pyx_v_envelope, __pyx_t_8);
    __pyx_t_8 = 0;
 1836: 
+1837:     check_ndim(envelope)
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_check_ndim); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1837, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_1 = NULL;
  __pyx_t_4 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_3);
    if (likely(__pyx_t_1)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_1);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_3, function);
      __pyx_t_4 = 1;
    }
  }
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_1, __pyx_v_envelope};
    __pyx_t_8 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4);
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1837, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  }
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 1838: 
+1839:     cdef double [:] envelope_view = envelope
  __pyx_t_9 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_envelope, PyBUF_WRITABLE); if (unlikely(!__pyx_t_9.memview)) __PYX_ERR(0, 1839, __pyx_L1_error)
  __pyx_v_envelope_view = __pyx_t_9;
  __pyx_t_9.memview = NULL;
  __pyx_t_9.data = NULL;
 1840: 
+1841:     gen =  mus_any.from_ptr(cclm.mus_make_env(&envelope_view[0], len(envelope) // 2, scaler, offset, base, duration, 0, NULL))
  __pyx_t_10 = 0;
  __pyx_t_4 = -1;
  if (__pyx_t_10 < 0) {
    __pyx_t_10 += __pyx_v_envelope_view.shape[0];
    if (unlikely(__pyx_t_10 < 0)) __pyx_t_4 = 0;
  } else if (unlikely(__pyx_t_10 >= __pyx_v_envelope_view.shape[0])) __pyx_t_4 = 0;
  if (unlikely(__pyx_t_4 != -1)) {
    __Pyx_RaiseBufferIndexError(__pyx_t_4);
    __PYX_ERR(0, 1841, __pyx_L1_error)
  }
  __pyx_t_11 = PyObject_Length(__pyx_v_envelope); if (unlikely(__pyx_t_11 == ((Py_ssize_t)-1))) __PYX_ERR(0, 1841, __pyx_L1_error)
  __pyx_t_12 = __pyx_PyFloat_AsDouble(__pyx_v_scaler); if (unlikely((__pyx_t_12 == ((mus_float_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 1841, __pyx_L1_error)
  __pyx_t_13 = __pyx_PyFloat_AsDouble(__pyx_v_offset); if (unlikely((__pyx_t_13 == ((mus_float_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 1841, __pyx_L1_error)
  __pyx_t_14 = __pyx_PyFloat_AsDouble(__pyx_v_base); if (unlikely((__pyx_t_14 == ((mus_float_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 1841, __pyx_L1_error)
  __pyx_t_15 = __pyx_PyFloat_AsDouble(__pyx_v_duration); if (unlikely((__pyx_t_15 == ((mus_float_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 1841, __pyx_L1_error)
  __pyx_t_8 = ((PyObject *)__pyx_vtabptr_8pysndlib_3clm_mus_any->from_ptr(mus_make_env((&(*((double *) ( /* dim=0 */ (__pyx_v_envelope_view.data + __pyx_t_10 * __pyx_v_envelope_view.strides[0]) )))), __Pyx_div_Py_ssize_t(__pyx_t_11, 2), __pyx_t_12, __pyx_t_13, __pyx_t_14, __pyx_t_15, 0, NULL), NULL)); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1841, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __pyx_v_gen = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)__pyx_t_8);
  __pyx_t_8 = 0;
+1842:     gen.cache_append(envelope)
  __pyx_t_8 = ((struct __pyx_vtabstruct_8pysndlib_3clm_mus_any *)__pyx_v_gen->__pyx_vtab)->cache_append(__pyx_v_gen, __pyx_v_envelope, 0); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1842, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+1843:     return gen
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __Pyx_INCREF((PyObject *)__pyx_v_gen);
  __pyx_r = __pyx_v_gen;
  goto __pyx_L0;
 1844: 
+1845: cpdef cython.double env(gen: mus_any):
static PyObject *__pyx_pw_8pysndlib_3clm_165env(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static double __pyx_f_8pysndlib_3clm_env(struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen, CYTHON_UNUSED int __pyx_skip_dispatch) {
  double __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("env", 0);
/* … */
  /* function exit code */
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_165env(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_164env, "\n    next sample from envelope generator.\n    \n    :param gen: env gen\n    :rtype: float\n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_165env = {"env", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_165env, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_164env};
static PyObject *__pyx_pw_8pysndlib_3clm_165env(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("env (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_gen,0};
    PyObject* values[1] = {0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_gen)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1845, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "env") < 0)) __PYX_ERR(0, 1845, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
    }
    __pyx_v_gen = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)values[0]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("env", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 1845, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.env", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_gen), __pyx_ptype_8pysndlib_3clm_mus_any, 0, "gen", 0))) __PYX_ERR(0, 1845, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pysndlib_3clm_164env(__pyx_self, __pyx_v_gen);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_164env(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("env", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_8pysndlib_3clm_env(__pyx_v_gen, 0); if (unlikely(__pyx_t_1 == ((double)-1) && PyErr_Occurred())) __PYX_ERR(0, 1845, __pyx_L1_error)
  __pyx_t_2 = PyFloat_FromDouble(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1845, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pysndlib.clm.env", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_41 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 1845, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  if (PyDict_SetItem(__pyx_t_41, __pyx_n_s_gen, __pyx_n_s_mus_any) < 0) __PYX_ERR(0, 1845, __pyx_L1_error)
  __pyx_t_37 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_165env, 0, __pyx_n_s_env, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__247)); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 1845, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_37, __pyx_t_41);
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_env, __pyx_t_37) < 0) __PYX_ERR(0, 1845, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
/* … */
  __pyx_codeobj__247 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__46, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_env, 1845, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__247)) __PYX_ERR(0, 1845, __pyx_L1_error)
 1846:     """
 1847:     next sample from envelope generator.
 1848:     
 1849:     :param gen: env gen
 1850:     :rtype: float
 1851:     """
+1852:     return cclm.mus_env(gen._ptr)
  __pyx_r = mus_env(__pyx_v_gen->_ptr);
  goto __pyx_L0;
 1853: 
+1854: cpdef bint is_env(gen: mus_any):
static PyObject *__pyx_pw_8pysndlib_3clm_167is_env(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static int __pyx_f_8pysndlib_3clm_is_env(struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen, CYTHON_UNUSED int __pyx_skip_dispatch) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_env", 0);
/* … */
  /* function exit code */
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_167is_env(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_166is_env, "\n    returns True if gen is an env.\n    \n    :param gen: gen\n    :rtype: bool\n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_167is_env = {"is_env", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_167is_env, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_166is_env};
static PyObject *__pyx_pw_8pysndlib_3clm_167is_env(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_env (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_gen,0};
    PyObject* values[1] = {0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_gen)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1854, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "is_env") < 0)) __PYX_ERR(0, 1854, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
    }
    __pyx_v_gen = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)values[0]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("is_env", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 1854, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.is_env", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_gen), __pyx_ptype_8pysndlib_3clm_mus_any, 0, "gen", 0))) __PYX_ERR(0, 1854, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pysndlib_3clm_166is_env(__pyx_self, __pyx_v_gen);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_166is_env(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_env", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_8pysndlib_3clm_is_env(__pyx_v_gen, 0); if (unlikely(__pyx_t_1 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1854, __pyx_L1_error)
  __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1854, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pysndlib.clm.is_env", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_37 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 1854, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  if (PyDict_SetItem(__pyx_t_37, __pyx_n_s_gen, __pyx_n_s_mus_any) < 0) __PYX_ERR(0, 1854, __pyx_L1_error)
  __pyx_t_41 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_167is_env, 0, __pyx_n_s_is_env, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__248)); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 1854, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_41, __pyx_t_37);
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_is_env, __pyx_t_41) < 0) __PYX_ERR(0, 1854, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
/* … */
  __pyx_codeobj__248 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__46, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_is_env, 1854, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__248)) __PYX_ERR(0, 1854, __pyx_L1_error)
 1855:     """
 1856:     returns True if gen is an env.
 1857:     
 1858:     :param gen: gen
 1859:     :rtype: bool
 1860:     """
+1861:     return cclm.mus_is_env(gen._ptr)
  __pyx_r = mus_is_env(__pyx_v_gen->_ptr);
  goto __pyx_L0;
 1862: 
+1863: cpdef cython.double env_interp(x: cython.double, env: mus_any):
static PyObject *__pyx_pw_8pysndlib_3clm_169env_interp(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static double __pyx_f_8pysndlib_3clm_env_interp(double __pyx_v_x, struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_env, CYTHON_UNUSED int __pyx_skip_dispatch) {
  double __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("env_interp", 0);
/* … */
  /* function exit code */
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_169env_interp(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_168env_interp, "\n    value of envelope env at x.\n    \n    :param x: location \\in envelope\n    :param env: env gen\n    :rtype: float\n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_169env_interp = {"env_interp", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_169env_interp, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_168env_interp};
static PyObject *__pyx_pw_8pysndlib_3clm_169env_interp(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  double __pyx_v_x;
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_env = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("env_interp (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_x,&__pyx_n_s_env,0};
    PyObject* values[2] = {0,0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_x)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1863, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_env)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1863, __pyx_L3_error)
        else {
          __Pyx_RaiseArgtupleInvalid("env_interp", 1, 2, 2, 1); __PYX_ERR(0, 1863, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "env_interp") < 0)) __PYX_ERR(0, 1863, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 2)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
      values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
    }
    __pyx_v_x = __pyx_PyFloat_AsDouble(values[0]); if (unlikely((__pyx_v_x == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 1863, __pyx_L3_error)
    __pyx_v_env = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)values[1]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("env_interp", 1, 2, 2, __pyx_nargs); __PYX_ERR(0, 1863, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.env_interp", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_env), __pyx_ptype_8pysndlib_3clm_mus_any, 0, "env", 0))) __PYX_ERR(0, 1863, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pysndlib_3clm_168env_interp(__pyx_self, __pyx_v_x, __pyx_v_env);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_168env_interp(CYTHON_UNUSED PyObject *__pyx_self, double __pyx_v_x, struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_env) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("env_interp", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_8pysndlib_3clm_env_interp(__pyx_v_x, __pyx_v_env, 0); if (unlikely(__pyx_t_1 == ((double)-1) && PyErr_Occurred())) __PYX_ERR(0, 1863, __pyx_L1_error)
  __pyx_t_2 = PyFloat_FromDouble(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1863, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pysndlib.clm.env_interp", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__249 = PyTuple_Pack(2, __pyx_n_s_x, __pyx_n_s_env); if (unlikely(!__pyx_tuple__249)) __PYX_ERR(0, 1863, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__249);
  __Pyx_GIVEREF(__pyx_tuple__249);
/* … */
  __pyx_t_41 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 1863, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  if (PyDict_SetItem(__pyx_t_41, __pyx_n_s_x, __pyx_kp_s_cython_double) < 0) __PYX_ERR(0, 1863, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_41, __pyx_n_s_env, __pyx_n_s_mus_any) < 0) __PYX_ERR(0, 1863, __pyx_L1_error)
  __pyx_t_37 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_169env_interp, 0, __pyx_n_s_env_interp, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__250)); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 1863, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_37, __pyx_t_41);
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_env_interp, __pyx_t_37) < 0) __PYX_ERR(0, 1863, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
  __pyx_codeobj__250 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__249, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_env_interp, 1863, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__250)) __PYX_ERR(0, 1863, __pyx_L1_error)
 1864:     """
 1865:     value of envelope env at x.
 1866:     
 1867:     :param x: location \in envelope
 1868:     :param env: env gen
 1869:     :rtype: float
 1870:     """
+1871:     return cclm.mus_env_interp(x, env._ptr)
  __pyx_r = mus_env_interp(__pyx_v_x, __pyx_v_env->_ptr);
  goto __pyx_L0;
 1872: 
+1873: cpdef cython.double envelope_interp(x: cython.double, env: mus_any):
static PyObject *__pyx_pw_8pysndlib_3clm_171envelope_interp(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static double __pyx_f_8pysndlib_3clm_envelope_interp(double __pyx_v_x, struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_env, CYTHON_UNUSED int __pyx_skip_dispatch) {
  double __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("envelope_interp", 0);
/* … */
  /* function exit code */
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_171envelope_interp(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_170envelope_interp, "\n    value of envelope env at x.\n    \n    :param x: location \\in envelope\n    :param env: env gen\n    :rtype: float\n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_171envelope_interp = {"envelope_interp", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_171envelope_interp, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_170envelope_interp};
static PyObject *__pyx_pw_8pysndlib_3clm_171envelope_interp(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  double __pyx_v_x;
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_env = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("envelope_interp (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_x,&__pyx_n_s_env,0};
    PyObject* values[2] = {0,0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_x)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1873, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_env)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1873, __pyx_L3_error)
        else {
          __Pyx_RaiseArgtupleInvalid("envelope_interp", 1, 2, 2, 1); __PYX_ERR(0, 1873, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "envelope_interp") < 0)) __PYX_ERR(0, 1873, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 2)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
      values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
    }
    __pyx_v_x = __pyx_PyFloat_AsDouble(values[0]); if (unlikely((__pyx_v_x == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 1873, __pyx_L3_error)
    __pyx_v_env = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)values[1]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("envelope_interp", 1, 2, 2, __pyx_nargs); __PYX_ERR(0, 1873, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.envelope_interp", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_env), __pyx_ptype_8pysndlib_3clm_mus_any, 0, "env", 0))) __PYX_ERR(0, 1873, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pysndlib_3clm_170envelope_interp(__pyx_self, __pyx_v_x, __pyx_v_env);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_170envelope_interp(CYTHON_UNUSED PyObject *__pyx_self, double __pyx_v_x, struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_env) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("envelope_interp", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_8pysndlib_3clm_envelope_interp(__pyx_v_x, __pyx_v_env, 0); if (unlikely(__pyx_t_1 == ((double)-1) && PyErr_Occurred())) __PYX_ERR(0, 1873, __pyx_L1_error)
  __pyx_t_2 = PyFloat_FromDouble(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1873, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pysndlib.clm.envelope_interp", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_37 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 1873, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  if (PyDict_SetItem(__pyx_t_37, __pyx_n_s_x, __pyx_kp_s_cython_double) < 0) __PYX_ERR(0, 1873, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_37, __pyx_n_s_env, __pyx_n_s_mus_any) < 0) __PYX_ERR(0, 1873, __pyx_L1_error)
  __pyx_t_41 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_171envelope_interp, 0, __pyx_n_s_envelope_interp, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__251)); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 1873, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_41, __pyx_t_37);
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_envelope_interp, __pyx_t_41) < 0) __PYX_ERR(0, 1873, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
/* … */
  __pyx_codeobj__251 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__249, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_envelope_interp, 1873, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__251)) __PYX_ERR(0, 1873, __pyx_L1_error)
 1874:     """
 1875:     value of envelope env at x.
 1876:     
 1877:     :param x: location \in envelope
 1878:     :param env: env gen
 1879:     :rtype: float
 1880:     """
+1881:     return cclm.mus_env_interp(x, env._ptr)
  __pyx_r = mus_env_interp(__pyx_v_x, __pyx_v_env->_ptr);
  goto __pyx_L0;
 1882: 
 1883: # this is slow because of needing ctypes to define function at runtime
 1884: # but no other way to do it with cython without changing sndlib code
+1885: cpdef cython.double env_any(gen: mus_any, connection_function):
static PyObject *__pyx_pw_8pysndlib_3clm_173env_any(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static double __pyx_f_8pysndlib_3clm_env_any(struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen, PyObject *__pyx_v_connection_function, CYTHON_UNUSED int __pyx_skip_dispatch) {
  PyObject *__pyx_v_f = NULL;
  connect_points_cb __pyx_v_cy_f_ptr;
  double __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("env_any", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("pysndlib.clm.env_any", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_f);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_173env_any(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_172env_any, "\n    generate env output using conncection_func to 'connect the dots'.\n    \n    the env-any connecting function takes one argument, the current envelope value treated as going between 0.0 and 1.0 between each two points. \n    :param env: env gen\n    :param connection_function: function used to connect points\n    :rtype: float\n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_173env_any = {"env_any", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_173env_any, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_172env_any};
static PyObject *__pyx_pw_8pysndlib_3clm_173env_any(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen = 0;
  PyObject *__pyx_v_connection_function = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("env_any (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_gen,&__pyx_n_s_connection_function,0};
    PyObject* values[2] = {0,0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_gen)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1885, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_connection_function)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1885, __pyx_L3_error)
        else {
          __Pyx_RaiseArgtupleInvalid("env_any", 1, 2, 2, 1); __PYX_ERR(0, 1885, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "env_any") < 0)) __PYX_ERR(0, 1885, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 2)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
      values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
    }
    __pyx_v_gen = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)values[0]);
    __pyx_v_connection_function = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("env_any", 1, 2, 2, __pyx_nargs); __PYX_ERR(0, 1885, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.env_any", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_gen), __pyx_ptype_8pysndlib_3clm_mus_any, 0, "gen", 0))) __PYX_ERR(0, 1885, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pysndlib_3clm_172env_any(__pyx_self, __pyx_v_gen, __pyx_v_connection_function);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_172env_any(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen, PyObject *__pyx_v_connection_function) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("env_any", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_8pysndlib_3clm_env_any(__pyx_v_gen, __pyx_v_connection_function, 0); if (unlikely(__pyx_t_1 == ((double)-1) && PyErr_Occurred())) __PYX_ERR(0, 1885, __pyx_L1_error)
  __pyx_t_2 = PyFloat_FromDouble(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1885, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pysndlib.clm.env_any", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__252 = PyTuple_Pack(2, __pyx_n_s_gen, __pyx_n_s_connection_function); if (unlikely(!__pyx_tuple__252)) __PYX_ERR(0, 1885, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__252);
  __Pyx_GIVEREF(__pyx_tuple__252);
/* … */
  __pyx_t_41 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 1885, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  if (PyDict_SetItem(__pyx_t_41, __pyx_n_s_gen, __pyx_n_s_mus_any) < 0) __PYX_ERR(0, 1885, __pyx_L1_error)
  __pyx_t_37 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_173env_any, 0, __pyx_n_s_env_any, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__253)); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 1885, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_37, __pyx_t_41);
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_env_any, __pyx_t_37) < 0) __PYX_ERR(0, 1885, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
  __pyx_codeobj__253 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__252, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_env_any, 1885, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__253)) __PYX_ERR(0, 1885, __pyx_L1_error)
 1886:     """
 1887:     generate env output using conncection_func to 'connect the dots'.
 1888:     
 1889:     the env-any connecting function takes one argument, the current envelope value treated as going between 0.0 and 1.0 between each two points. 
 1890:     :param env: env gen
 1891:     :param connection_function: function used to connect points
 1892:     :rtype: float
 1893:     """
 1894: 
+1895:     f = ENVFUNCTION(connection_function)
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_ENVFUNCTION); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1895, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  __pyx_t_4 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
      __pyx_t_4 = 1;
    }
  }
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_v_connection_function};
    __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4);
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1895, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  }
  __pyx_v_f = __pyx_t_1;
  __pyx_t_1 = 0;
+1896:     cdef cclm.connect_points_cb cy_f_ptr = (<cclm.connect_points_cb*><size_t>ctypes.addressof(f))[0]
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_ctypes); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1896, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_addressof); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1896, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = NULL;
  __pyx_t_4 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
    if (likely(__pyx_t_2)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_2);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_3, function);
      __pyx_t_4 = 1;
    }
  }
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_v_f};
    __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4);
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1896, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  }
  __pyx_t_5 = __Pyx_PyInt_As_size_t(__pyx_t_1); if (unlikely((__pyx_t_5 == (size_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 1896, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_cy_f_ptr = (((connect_points_cb *)((size_t)__pyx_t_5))[0]);
+1897:     return cclm.mus_env_any(gen._ptr, cy_f_ptr)
  __pyx_r = mus_env_any(__pyx_v_gen->_ptr, __pyx_v_cy_f_ptr);
  goto __pyx_L0;
 1898: 
 1899: 
 1900: # ---------------- pulsed-env ---------------- #    
+1901: cpdef mus_any make_pulsed_env(envelope, duration: cython.double, frequency: cython.double):
static PyObject *__pyx_pw_8pysndlib_3clm_175make_pulsed_env(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_f_8pysndlib_3clm_make_pulsed_env(PyObject *__pyx_v_envelope, double __pyx_v_duration, double __pyx_v_frequency, CYTHON_UNUSED int __pyx_skip_dispatch) {
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_pl = NULL;
  __Pyx_memviewslice __pyx_v_envelope_view = { 0, 0, { 0 }, { 0 }, { 0 } };
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_ge = NULL;
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen = NULL;
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("make_pulsed_env", 0);
  __Pyx_INCREF(__pyx_v_envelope);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __PYX_XCLEAR_MEMVIEW(&__pyx_t_8, 1);
  __Pyx_AddTraceback("pysndlib.clm.make_pulsed_env", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_pl);
  __PYX_XCLEAR_MEMVIEW(&__pyx_v_envelope_view, 1);
  __Pyx_XDECREF((PyObject *)__pyx_v_ge);
  __Pyx_XDECREF((PyObject *)__pyx_v_gen);
  __Pyx_XDECREF(__pyx_v_envelope);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_175make_pulsed_env(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_174make_pulsed_env, "\n    produces a repeating envelope. env sticks at its last value, but pulsed-env repeats it over and over. \n    \n    :param env: env gen\n    :param duration: duration of envelope\n    :param frequency: repetition rate \\in hz\n    :return: env output\n    :rtype: float\n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_175make_pulsed_env = {"make_pulsed_env", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_175make_pulsed_env, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_174make_pulsed_env};
static PyObject *__pyx_pw_8pysndlib_3clm_175make_pulsed_env(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_envelope = 0;
  double __pyx_v_duration;
  double __pyx_v_frequency;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("make_pulsed_env (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_envelope,&__pyx_n_s_duration,&__pyx_n_s_frequency,0};
    PyObject* values[3] = {0,0,0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_envelope)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1901, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_duration)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1901, __pyx_L3_error)
        else {
          __Pyx_RaiseArgtupleInvalid("make_pulsed_env", 1, 3, 3, 1); __PYX_ERR(0, 1901, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_frequency)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1901, __pyx_L3_error)
        else {
          __Pyx_RaiseArgtupleInvalid("make_pulsed_env", 1, 3, 3, 2); __PYX_ERR(0, 1901, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "make_pulsed_env") < 0)) __PYX_ERR(0, 1901, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 3)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
      values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
      values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
    }
    __pyx_v_envelope = values[0];
    __pyx_v_duration = __pyx_PyFloat_AsDouble(values[1]); if (unlikely((__pyx_v_duration == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 1901, __pyx_L3_error)
    __pyx_v_frequency = __pyx_PyFloat_AsDouble(values[2]); if (unlikely((__pyx_v_frequency == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 1901, __pyx_L3_error)
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("make_pulsed_env", 1, 3, 3, __pyx_nargs); __PYX_ERR(0, 1901, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.make_pulsed_env", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pysndlib_3clm_174make_pulsed_env(__pyx_self, __pyx_v_envelope, __pyx_v_duration, __pyx_v_frequency);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_174make_pulsed_env(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_envelope, double __pyx_v_duration, double __pyx_v_frequency) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("make_pulsed_env", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = ((PyObject *)__pyx_f_8pysndlib_3clm_make_pulsed_env(__pyx_v_envelope, __pyx_v_duration, __pyx_v_frequency, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1901, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pysndlib.clm.make_pulsed_env", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__254 = PyTuple_Pack(3, __pyx_n_s_envelope, __pyx_n_s_duration, __pyx_n_s_frequency); if (unlikely(!__pyx_tuple__254)) __PYX_ERR(0, 1901, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__254);
  __Pyx_GIVEREF(__pyx_tuple__254);
/* … */
  __pyx_t_37 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 1901, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  if (PyDict_SetItem(__pyx_t_37, __pyx_n_s_duration, __pyx_kp_s_cython_double) < 0) __PYX_ERR(0, 1901, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_37, __pyx_n_s_frequency, __pyx_kp_s_cython_double) < 0) __PYX_ERR(0, 1901, __pyx_L1_error)
  __pyx_t_41 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_175make_pulsed_env, 0, __pyx_n_s_make_pulsed_env, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__255)); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 1901, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_41, __pyx_t_37);
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_make_pulsed_env, __pyx_t_41) < 0) __PYX_ERR(0, 1901, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
  __pyx_codeobj__255 = (PyObject*)__Pyx_PyCode_New(3, 0, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__254, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_make_pulsed_env, 1901, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__255)) __PYX_ERR(0, 1901, __pyx_L1_error)
 1902:     """
 1903:     produces a repeating envelope. env sticks at its last value, but pulsed-env repeats it over and over. 
 1904:     
 1905:     :param env: env gen
 1906:     :param duration: duration of envelope
 1907:     :param frequency: repetition rate \in hz
 1908:     :return: env output
 1909:     :rtype: float
 1910:     """
 1911: 
+1912:     if isinstance(envelope, list):
  __pyx_t_1 = PyList_Check(__pyx_v_envelope); 
  if (__pyx_t_1) {
/* … */
  }
+1913:         envelope = np.array(envelope, dtype=np.double)
    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1913, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_array); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1913, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1913, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_INCREF(__pyx_v_envelope);
    __Pyx_GIVEREF(__pyx_v_envelope);
    PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_envelope);
    __pyx_t_4 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1913, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_np); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1913, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_double); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1913, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_dtype, __pyx_t_6) < 0) __PYX_ERR(0, 1913, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_2, __pyx_t_4); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1913, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF_SET(__pyx_v_envelope, __pyx_t_6);
    __pyx_t_6 = 0;
 1914: 
+1915:     pl = mus_any.from_ptr(cclm.mus_make_pulse_train(frequency, 1.0, 0.0))
  __pyx_t_6 = ((PyObject *)__pyx_vtabptr_8pysndlib_3clm_mus_any->from_ptr(mus_make_pulse_train(__pyx_v_frequency, 1.0, 0.0), NULL)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1915, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_v_pl = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)__pyx_t_6);
  __pyx_t_6 = 0;
 1916: 
+1917:     check_ndim(envelope)
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_check_ndim); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1917, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_2 = NULL;
  __pyx_t_7 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_4);
    if (likely(__pyx_t_2)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
      __Pyx_INCREF(__pyx_t_2);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_4, function);
      __pyx_t_7 = 1;
    }
  }
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_v_envelope};
    __pyx_t_6 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_7, 1+__pyx_t_7);
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1917, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  }
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
 1918: 
+1919:     cdef double [:] envelope_view = envelope
  __pyx_t_8 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_envelope, PyBUF_WRITABLE); if (unlikely(!__pyx_t_8.memview)) __PYX_ERR(0, 1919, __pyx_L1_error)
  __pyx_v_envelope_view = __pyx_t_8;
  __pyx_t_8.memview = NULL;
  __pyx_t_8.data = NULL;
 1920: 
+1921:     ge =  mus_any.from_ptr(cclm.mus_make_env(&envelope_view[0], len(envelope) // 2, 1.0, 0, 1.0, duration, 0, NULL))
  __pyx_t_9 = 0;
  __pyx_t_7 = -1;
  if (__pyx_t_9 < 0) {
    __pyx_t_9 += __pyx_v_envelope_view.shape[0];
    if (unlikely(__pyx_t_9 < 0)) __pyx_t_7 = 0;
  } else if (unlikely(__pyx_t_9 >= __pyx_v_envelope_view.shape[0])) __pyx_t_7 = 0;
  if (unlikely(__pyx_t_7 != -1)) {
    __Pyx_RaiseBufferIndexError(__pyx_t_7);
    __PYX_ERR(0, 1921, __pyx_L1_error)
  }
  __pyx_t_10 = PyObject_Length(__pyx_v_envelope); if (unlikely(__pyx_t_10 == ((Py_ssize_t)-1))) __PYX_ERR(0, 1921, __pyx_L1_error)
  __pyx_t_6 = ((PyObject *)__pyx_vtabptr_8pysndlib_3clm_mus_any->from_ptr(mus_make_env((&(*((double *) ( /* dim=0 */ (__pyx_v_envelope_view.data + __pyx_t_9 * __pyx_v_envelope_view.strides[0]) )))), __Pyx_div_Py_ssize_t(__pyx_t_10, 2), 1.0, 0.0, 1.0, __pyx_v_duration, 0, NULL), NULL)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1921, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_v_ge = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)__pyx_t_6);
  __pyx_t_6 = 0;
+1922:     gen = mus_any.from_ptr(cclm.mus_make_pulsed_env(ge._ptr, pl._ptr))
  __pyx_t_6 = ((PyObject *)__pyx_vtabptr_8pysndlib_3clm_mus_any->from_ptr(mus_make_pulsed_env(__pyx_v_ge->_ptr, __pyx_v_pl->_ptr), NULL)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1922, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_v_gen = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)__pyx_t_6);
  __pyx_t_6 = 0;
+1923:     gen.cache_extend([pl, ge, envelope])
  __pyx_t_6 = PyList_New(3); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1923, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_INCREF((PyObject *)__pyx_v_pl);
  __Pyx_GIVEREF((PyObject *)__pyx_v_pl);
  PyList_SET_ITEM(__pyx_t_6, 0, ((PyObject *)__pyx_v_pl));
  __Pyx_INCREF((PyObject *)__pyx_v_ge);
  __Pyx_GIVEREF((PyObject *)__pyx_v_ge);
  PyList_SET_ITEM(__pyx_t_6, 1, ((PyObject *)__pyx_v_ge));
  __Pyx_INCREF(__pyx_v_envelope);
  __Pyx_GIVEREF(__pyx_v_envelope);
  PyList_SET_ITEM(__pyx_t_6, 2, __pyx_v_envelope);
  __pyx_t_4 = ((struct __pyx_vtabstruct_8pysndlib_3clm_mus_any *)__pyx_v_gen->__pyx_vtab)->cache_extend(__pyx_v_gen, __pyx_t_6, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1923, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+1924:     return gen
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __Pyx_INCREF((PyObject *)__pyx_v_gen);
  __pyx_r = __pyx_v_gen;
  goto __pyx_L0;
 1925: 
+1926: cpdef cython.double pulsed_env(gen: mus_any, fm: Optional[float]=None):
static PyObject *__pyx_pw_8pysndlib_3clm_177pulsed_env(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static double __pyx_f_8pysndlib_3clm_pulsed_env(struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen, CYTHON_UNUSED int __pyx_skip_dispatch, struct __pyx_opt_args_8pysndlib_3clm_pulsed_env *__pyx_optional_args) {
  PyObject *__pyx_v_fm = ((PyObject *)Py_None);
  double __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("pulsed_env", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_fm = __pyx_optional_args->fm;
    }
  }
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("pysndlib.clm.pulsed_env", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_177pulsed_env(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_176pulsed_env, "\n    next sample from envelope generator.\n    \n    :param gen: env gen\n    :param fm: change frequency of repetition\n    :rtype: float\n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_177pulsed_env = {"pulsed_env", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_177pulsed_env, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_176pulsed_env};
static PyObject *__pyx_pw_8pysndlib_3clm_177pulsed_env(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen = 0;
  PyObject *__pyx_v_fm = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("pulsed_env (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_gen,&__pyx_n_s_fm,0};
    PyObject* values[2] = {0,0};
    values[1] = ((PyObject *)Py_None);
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_gen)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1926, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_fm);
          if (value) { values[1] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1926, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "pulsed_env") < 0)) __PYX_ERR(0, 1926, __pyx_L3_error)
      }
    } else {
      switch (__pyx_nargs) {
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_gen = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)values[0]);
    __pyx_v_fm = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("pulsed_env", 0, 1, 2, __pyx_nargs); __PYX_ERR(0, 1926, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.pulsed_env", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_gen), __pyx_ptype_8pysndlib_3clm_mus_any, 0, "gen", 0))) __PYX_ERR(0, 1926, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pysndlib_3clm_176pulsed_env(__pyx_self, __pyx_v_gen, __pyx_v_fm);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_176pulsed_env(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen, PyObject *__pyx_v_fm) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("pulsed_env", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2.__pyx_n = 1;
  __pyx_t_2.fm = __pyx_v_fm;
  __pyx_t_1 = __pyx_f_8pysndlib_3clm_pulsed_env(__pyx_v_gen, 0, &__pyx_t_2); if (unlikely(__pyx_t_1 == ((double)-1) && PyErr_Occurred())) __PYX_ERR(0, 1926, __pyx_L1_error)
  __pyx_t_3 = PyFloat_FromDouble(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1926, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_r = __pyx_t_3;
  __pyx_t_3 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("pysndlib.clm.pulsed_env", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__256 = PyTuple_Pack(2, __pyx_n_s_gen, __pyx_n_s_fm); if (unlikely(!__pyx_tuple__256)) __PYX_ERR(0, 1926, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__256);
  __Pyx_GIVEREF(__pyx_tuple__256);
  __pyx_codeobj__257 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__256, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_pulsed_env, 1926, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__257)) __PYX_ERR(0, 1926, __pyx_L1_error)
/* … */
  __pyx_t_41 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 1926, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  if (PyDict_SetItem(__pyx_t_41, __pyx_n_s_gen, __pyx_n_s_mus_any) < 0) __PYX_ERR(0, 1926, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_41, __pyx_n_s_fm, __pyx_kp_s_Optional_float) < 0) __PYX_ERR(0, 1926, __pyx_L1_error)
  __pyx_t_37 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_177pulsed_env, 0, __pyx_n_s_pulsed_env, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__257)); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 1926, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_37, __pyx_tuple__258);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_37, __pyx_t_41);
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_pulsed_env, __pyx_t_37) < 0) __PYX_ERR(0, 1926, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
  __pyx_tuple__258 = PyTuple_Pack(1, Py_None); if (unlikely(!__pyx_tuple__258)) __PYX_ERR(0, 1926, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__258);
  __Pyx_GIVEREF(__pyx_tuple__258);
/* … */
struct __pyx_opt_args_8pysndlib_3clm_pulsed_env {
  int __pyx_n;
  PyObject *fm;
};
 1927:     """
 1928:     next sample from envelope generator.
 1929:     
 1930:     :param gen: env gen
 1931:     :param fm: change frequency of repetition
 1932:     :rtype: float
 1933:     """
+1934:     if(fm):
  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_fm); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 1934, __pyx_L1_error)
  if (__pyx_t_1) {
/* … */
  }
+1935:         return cclm.mus_pulsed_env(gen._ptr, fm)
    __pyx_t_2 = __pyx_PyFloat_AsDouble(__pyx_v_fm); if (unlikely((__pyx_t_2 == ((mus_float_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 1935, __pyx_L1_error)
    __pyx_r = mus_pulsed_env(__pyx_v_gen->_ptr, __pyx_t_2);
    goto __pyx_L0;
 1936:     else:
+1937:         return cclm.mus_pulsed_env_unmodulated(gen._ptr)
  /*else*/ {
    __pyx_r = mus_pulsed_env_unmodulated(__pyx_v_gen->_ptr);
    goto __pyx_L0;
  }
 1938: 
+1939: cpdef bint is_pulsed_env(gen: mus_any):
static PyObject *__pyx_pw_8pysndlib_3clm_179is_pulsed_env(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static int __pyx_f_8pysndlib_3clm_is_pulsed_env(struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen, CYTHON_UNUSED int __pyx_skip_dispatch) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_pulsed_env", 0);
/* … */
  /* function exit code */
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_179is_pulsed_env(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_178is_pulsed_env, "\n    returns True if gen is a pulsed_env.\n    \n    :param gen: gen\n    :rtype: bool\n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_179is_pulsed_env = {"is_pulsed_env", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_179is_pulsed_env, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_178is_pulsed_env};
static PyObject *__pyx_pw_8pysndlib_3clm_179is_pulsed_env(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_pulsed_env (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_gen,0};
    PyObject* values[1] = {0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_gen)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1939, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "is_pulsed_env") < 0)) __PYX_ERR(0, 1939, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
    }
    __pyx_v_gen = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)values[0]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("is_pulsed_env", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 1939, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.is_pulsed_env", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_gen), __pyx_ptype_8pysndlib_3clm_mus_any, 0, "gen", 0))) __PYX_ERR(0, 1939, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pysndlib_3clm_178is_pulsed_env(__pyx_self, __pyx_v_gen);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_178is_pulsed_env(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_pulsed_env", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_8pysndlib_3clm_is_pulsed_env(__pyx_v_gen, 0); if (unlikely(__pyx_t_1 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1939, __pyx_L1_error)
  __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1939, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pysndlib.clm.is_pulsed_env", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_37 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 1939, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  if (PyDict_SetItem(__pyx_t_37, __pyx_n_s_gen, __pyx_n_s_mus_any) < 0) __PYX_ERR(0, 1939, __pyx_L1_error)
  __pyx_t_41 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_179is_pulsed_env, 0, __pyx_n_s_is_pulsed_env, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__259)); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 1939, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_41, __pyx_t_37);
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_is_pulsed_env, __pyx_t_41) < 0) __PYX_ERR(0, 1939, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
/* … */
  __pyx_codeobj__259 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__46, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_is_pulsed_env, 1939, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__259)) __PYX_ERR(0, 1939, __pyx_L1_error)
 1940:     """
 1941:     returns True if gen is a pulsed_env.
 1942:     
 1943:     :param gen: gen
 1944:     :rtype: bool
 1945:     """
+1946:     return cclm.mus_is_pulsed_env(gen._ptr)
  __pyx_r = mus_is_pulsed_env(__pyx_v_gen->_ptr);
  goto __pyx_L0;
 1947: 
 1948: # todo envelope-interp different than env-interp
 1949: 
 1950: # ---------------- table-lookup ---------------- #
+1951: cpdef mus_any make_table_lookup(frequency: Optional[float]=0.0,
static PyObject *__pyx_pw_8pysndlib_3clm_181make_table_lookup(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_f_8pysndlib_3clm_make_table_lookup(CYTHON_UNUSED int __pyx_skip_dispatch, struct __pyx_opt_args_8pysndlib_3clm_make_table_lookup *__pyx_optional_args) {
  PyObject *__pyx_v_frequency = ((PyObject *)__pyx_float_0_0);
  PyObject *__pyx_v_initial_phase = ((PyObject *)__pyx_float_0_0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_8);
  __PYX_XCLEAR_MEMVIEW(&__pyx_t_9, 1);
  __Pyx_AddTraceback("pysndlib.clm.make_table_lookup", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __PYX_XCLEAR_MEMVIEW(&__pyx_v_wave_view, 1);
  __Pyx_XDECREF((PyObject *)__pyx_v_gen);
  __Pyx_XDECREF(__pyx_v_wave);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_181make_table_lookup(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_180make_table_lookup, "\n    return a new table_lookup generator. the default table size is 512; use size to set some other\n    size, or pass your own list/array as the 'wave'.\n    \n    :param frequency: frequency of gen \\in hz\n    :param initial_phase: initial phase of gen \\in radians\n    :param wave: np.ndarray if provided is waveform\n    :param size: if no wave provided, this will allocate a table of size \n    :param interp_type: type of interpolation used\n    :return: table_lookup gen\n    :rtype: mus_any\n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_181make_table_lookup = {"make_table_lookup", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_181make_table_lookup, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_180make_table_lookup};
static PyObject *__pyx_pw_8pysndlib_3clm_181make_table_lookup(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_frequency = 0;
  PyObject *__pyx_v_initial_phase = 0;
  PyObject *__pyx_v_wave = 0;
  PyObject *__pyx_v_size = 0;
  PyObject *__pyx_v_interp_type = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("make_table_lookup (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_frequency,&__pyx_n_s_initial_phase,&__pyx_n_s_wave,&__pyx_n_s_size,&__pyx_n_s_interp_type,0};
    PyObject* values[5] = {0,0,0,0,0};
    values[0] = ((PyObject *)__pyx_float_0_0);
    values[1] = ((PyObject *)__pyx_float_0_0);
/* … */
  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_180make_table_lookup(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_frequency, PyObject *__pyx_v_initial_phase, PyObject *__pyx_v_wave, PyObject *__pyx_v_size, PyObject *__pyx_v_interp_type) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("make_table_lookup", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2.__pyx_n = 5;
  __pyx_t_2.frequency = __pyx_v_frequency;
  __pyx_t_2.initial_phase = __pyx_v_initial_phase;
  __pyx_t_2.wave = __pyx_v_wave;
  __pyx_t_2.size = __pyx_v_size;
  __pyx_t_2.interp_type = __pyx_v_interp_type;
  __pyx_t_1 = ((PyObject *)__pyx_f_8pysndlib_3clm_make_table_lookup(0, &__pyx_t_2)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1951, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pysndlib.clm.make_table_lookup", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__260 = PyTuple_Pack(5, __pyx_n_s_frequency, __pyx_n_s_initial_phase, __pyx_n_s_wave, __pyx_n_s_size, __pyx_n_s_interp_type); if (unlikely(!__pyx_tuple__260)) __PYX_ERR(0, 1951, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__260);
  __Pyx_GIVEREF(__pyx_tuple__260);
/* … */
  __pyx_t_40 = PyTuple_New(5); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 1951, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  __Pyx_INCREF(__pyx_float_0_0);
  __Pyx_GIVEREF(__pyx_float_0_0);
  PyTuple_SET_ITEM(__pyx_t_40, 0, __pyx_float_0_0);
  __Pyx_INCREF(__pyx_float_0_0);
  __Pyx_GIVEREF(__pyx_float_0_0);
  PyTuple_SET_ITEM(__pyx_t_40, 1, __pyx_float_0_0);
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  PyTuple_SET_ITEM(__pyx_t_40, 2, Py_None);
  __Pyx_GIVEREF(__pyx_t_41);
  PyTuple_SET_ITEM(__pyx_t_40, 3, __pyx_t_41);
  __Pyx_GIVEREF(__pyx_t_37);
  PyTuple_SET_ITEM(__pyx_t_40, 4, __pyx_t_37);
  __pyx_t_41 = 0;
  __pyx_t_37 = 0;
  __pyx_t_37 = __Pyx_PyDict_NewPresized(4); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 1951, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  if (PyDict_SetItem(__pyx_t_37, __pyx_n_s_frequency, __pyx_kp_s_Optional_float) < 0) __PYX_ERR(0, 1951, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_37, __pyx_n_s_initial_phase, __pyx_kp_s_Optional_float) < 0) __PYX_ERR(0, 1951, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_37, __pyx_n_s_size, __pyx_kp_s_Optional_int) < 0) __PYX_ERR(0, 1951, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_37, __pyx_n_s_interp_type, __pyx_kp_s_Optional_int) < 0) __PYX_ERR(0, 1951, __pyx_L1_error)
  __pyx_t_41 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_181make_table_lookup, 0, __pyx_n_s_make_table_lookup, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__261)); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 1951, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_41, __pyx_t_40);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_41, __pyx_t_37);
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_make_table_lookup, __pyx_t_41) < 0) __PYX_ERR(0, 1951, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
  __pyx_codeobj__261 = (PyObject*)__Pyx_PyCode_New(5, 0, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__260, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_make_table_lookup, 1951, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__261)) __PYX_ERR(0, 1951, __pyx_L1_error)
/* … */
struct __pyx_opt_args_8pysndlib_3clm_make_table_lookup {
  int __pyx_n;
  PyObject *frequency;
  PyObject *initial_phase;
  PyObject *wave;
  PyObject *size;
  PyObject *interp_type;
};
 1952:                         initial_phase: Optional[float]=0.0,
+1953:                         wave=None,
  PyObject *__pyx_v_wave = ((PyObject *)Py_None);
  PyObject *__pyx_v_size = __pyx_k__22;
  PyObject *__pyx_v_interp_type = __pyx_k__23;
  __Pyx_memviewslice __pyx_v_wave_view = { 0, 0, { 0 }, { 0 }, { 0 } };
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen = NULL;
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("make_table_lookup", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_frequency = __pyx_optional_args->frequency;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_initial_phase = __pyx_optional_args->initial_phase;
        if (__pyx_optional_args->__pyx_n > 2) {
          __pyx_v_wave = __pyx_optional_args->wave;
          if (__pyx_optional_args->__pyx_n > 3) {
            __pyx_v_size = __pyx_optional_args->size;
            if (__pyx_optional_args->__pyx_n > 4) {
              __pyx_v_interp_type = __pyx_optional_args->interp_type;
            }
          }
        }
      }
    }
  }
  __Pyx_INCREF(__pyx_v_wave);
/* … */
    values[2] = ((PyObject *)Py_None);
    values[3] = __pyx_k__22;
    values[4] = __pyx_k__23;
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  5: values[4] = __Pyx_Arg_FASTCALL(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_frequency);
          if (value) { values[0] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1951, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_initial_phase);
          if (value) { values[1] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1951, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_wave);
          if (value) { values[2] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1951, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_size);
          if (value) { values[3] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1951, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_interp_type);
          if (value) { values[4] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1951, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "make_table_lookup") < 0)) __PYX_ERR(0, 1951, __pyx_L3_error)
      }
    } else {
      switch (__pyx_nargs) {
        case  5: values[4] = __Pyx_Arg_FASTCALL(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_frequency = values[0];
    __pyx_v_initial_phase = values[1];
    __pyx_v_wave = values[2];
    __pyx_v_size = values[3];
    __pyx_v_interp_type = values[4];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("make_table_lookup", 0, 0, 5, __pyx_nargs); __PYX_ERR(0, 1951, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.make_table_lookup", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pysndlib_3clm_180make_table_lookup(__pyx_self, __pyx_v_frequency, __pyx_v_initial_phase, __pyx_v_wave, __pyx_v_size, __pyx_v_interp_type);
+1954:                         size: Optional[int]=CLM.table_size,
  __Pyx_GetModuleGlobalName(__pyx_t_41, __pyx_n_s_CLM); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 1954, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  __pyx_t_37 = __Pyx_PyObject_GetAttrStr(__pyx_t_41, __pyx_n_s_table_size); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 1954, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
  __pyx_k__22 = __pyx_t_37;
  __Pyx_GIVEREF(__pyx_t_37);
  __pyx_t_37 = 0;
/* … */
  __Pyx_GetModuleGlobalName(__pyx_t_37, __pyx_n_s_CLM); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 1954, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  __pyx_t_41 = __Pyx_PyObject_GetAttrStr(__pyx_t_37, __pyx_n_s_table_size); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 1954, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
+1955:                         interp_type: Optional[int]=Interp.LINEAR):
  __pyx_t_37 = __Pyx_Enum_Interp_to_py(__pyx_e_8pysndlib_3clm_LINEAR); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 1955, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  __pyx_k__23 = __pyx_t_37;
  __Pyx_GIVEREF(__pyx_t_37);
  __pyx_t_37 = 0;
/* … */
  __pyx_t_37 = __Pyx_Enum_Interp_to_py(__pyx_e_8pysndlib_3clm_LINEAR); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 1955, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
 1956:     """
 1957:     return a new table_lookup generator. the default table size is 512; use size to set some other
 1958:     size, or pass your own list/array as the 'wave'.
 1959:     
 1960:     :param frequency: frequency of gen \in hz
 1961:     :param initial_phase: initial phase of gen \in radians
 1962:     :param wave: np.ndarray if provided is waveform
 1963:     :param size: if no wave provided, this will allocate a table of size 
 1964:     :param interp_type: type of interpolation used
 1965:     :return: table_lookup gen
 1966:     :rtype: mus_any
 1967:     """
 1968: 
+1969:     check_range('frequency', frequency, 0.0, get_srate() / 2)
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_check_range); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1969, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __pyx_f_8pysndlib_3clm_get_srate(0); if (unlikely(__pyx_t_3 == ((double)-1) && PyErr_Occurred())) __PYX_ERR(0, 1969, __pyx_L1_error)
  __pyx_t_4 = PyFloat_FromDouble((__pyx_t_3 / 2.0)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1969, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = NULL;
  __pyx_t_6 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_5)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_5);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
      __pyx_t_6 = 1;
    }
  }
  {
    PyObject *__pyx_callargs[5] = {__pyx_t_5, __pyx_n_s_frequency, __pyx_v_frequency, __pyx_float_0_0, __pyx_t_4};
    __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_6, 4+__pyx_t_6);
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1969, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 1970: 
+1971:     if wave is None:
  __pyx_t_7 = (__pyx_v_wave == Py_None);
  if (__pyx_t_7) {
/* … */
  }
+1972:         wave = np.zeros(size)
    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1972, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_zeros); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1972, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_2 = NULL;
    __pyx_t_6 = 0;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) {
      __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_4);
      if (likely(__pyx_t_2)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
        __Pyx_INCREF(__pyx_t_2);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_4, function);
        __pyx_t_6 = 1;
      }
    }
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_v_size};
      __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_6, 1+__pyx_t_6);
      __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1972, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    }
    __Pyx_DECREF_SET(__pyx_v_wave, __pyx_t_1);
    __pyx_t_1 = 0;
 1973: 
+1974:     if isinstance(wave, list):
  __pyx_t_7 = PyList_Check(__pyx_v_wave); 
  if (__pyx_t_7) {
/* … */
  }
+1975:         wave = np.array(wave, dtype=np.double)
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1975, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_array); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1975, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1975, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_INCREF(__pyx_v_wave);
    __Pyx_GIVEREF(__pyx_v_wave);
    PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_wave);
    __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1975, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_np); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1975, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_double); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1975, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_dtype, __pyx_t_8) < 0) __PYX_ERR(0, 1975, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1975, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF_SET(__pyx_v_wave, __pyx_t_8);
    __pyx_t_8 = 0;
 1976: 
+1977:     check_ndim(wave)
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_check_ndim); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1977, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_1 = NULL;
  __pyx_t_6 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_1)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_1);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
      __pyx_t_6 = 1;
    }
  }
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_1, __pyx_v_wave};
    __pyx_t_8 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_6, 1+__pyx_t_6);
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1977, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  }
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 1978: 
+1979:     cdef double [:] wave_view = wave
  __pyx_t_9 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_wave, PyBUF_WRITABLE); if (unlikely(!__pyx_t_9.memview)) __PYX_ERR(0, 1979, __pyx_L1_error)
  __pyx_v_wave_view = __pyx_t_9;
  __pyx_t_9.memview = NULL;
  __pyx_t_9.data = NULL;
 1980: 
+1981:     gen =  mus_any.from_ptr(cclm.mus_make_table_lookup(frequency, initial_phase, &wave_view[0], size, interp_type))
  __pyx_t_10 = __pyx_PyFloat_AsDouble(__pyx_v_frequency); if (unlikely((__pyx_t_10 == ((mus_float_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 1981, __pyx_L1_error)
  __pyx_t_11 = __pyx_PyFloat_AsDouble(__pyx_v_initial_phase); if (unlikely((__pyx_t_11 == ((mus_float_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 1981, __pyx_L1_error)
  __pyx_t_12 = 0;
  __pyx_t_6 = -1;
  if (__pyx_t_12 < 0) {
    __pyx_t_12 += __pyx_v_wave_view.shape[0];
    if (unlikely(__pyx_t_12 < 0)) __pyx_t_6 = 0;
  } else if (unlikely(__pyx_t_12 >= __pyx_v_wave_view.shape[0])) __pyx_t_6 = 0;
  if (unlikely(__pyx_t_6 != -1)) {
    __Pyx_RaiseBufferIndexError(__pyx_t_6);
    __PYX_ERR(0, 1981, __pyx_L1_error)
  }
  __pyx_t_13 = __Pyx_PyInt_As_mus_long_t(__pyx_v_size); if (unlikely((__pyx_t_13 == ((mus_long_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 1981, __pyx_L1_error)
  __pyx_t_14 = ((mus_interp_t)__Pyx_PyInt_As_mus_interp_t(__pyx_v_interp_type)); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1981, __pyx_L1_error)
  __pyx_t_8 = ((PyObject *)__pyx_vtabptr_8pysndlib_3clm_mus_any->from_ptr(mus_make_table_lookup(__pyx_t_10, __pyx_t_11, (&(*((double *) ( /* dim=0 */ (__pyx_v_wave_view.data + __pyx_t_12 * __pyx_v_wave_view.strides[0]) )))), __pyx_t_13, __pyx_t_14), NULL)); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1981, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __pyx_v_gen = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)__pyx_t_8);
  __pyx_t_8 = 0;
+1982:     gen.cache_append(wave)
  __pyx_t_8 = ((struct __pyx_vtabstruct_8pysndlib_3clm_mus_any *)__pyx_v_gen->__pyx_vtab)->cache_append(__pyx_v_gen, __pyx_v_wave, 0); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1982, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+1983:     return gen
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __Pyx_INCREF((PyObject *)__pyx_v_gen);
  __pyx_r = __pyx_v_gen;
  goto __pyx_L0;
 1984: 
+1985: cpdef cython.double table_lookup(gen: mus_any, fm: Optional[float]=None):
static PyObject *__pyx_pw_8pysndlib_3clm_183table_lookup(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static double __pyx_f_8pysndlib_3clm_table_lookup(struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen, CYTHON_UNUSED int __pyx_skip_dispatch, struct __pyx_opt_args_8pysndlib_3clm_table_lookup *__pyx_optional_args) {
  PyObject *__pyx_v_fm = ((PyObject *)Py_None);
  double __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("table_lookup", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_fm = __pyx_optional_args->fm;
    }
  }
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("pysndlib.clm.table_lookup", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_183table_lookup(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_182table_lookup, "\n    return next sample from table_lookup generator.\n    \n    :param gen: table_lookup gen\n    :param fm: fm input\n    :rtype: float\n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_183table_lookup = {"table_lookup", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_183table_lookup, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_182table_lookup};
static PyObject *__pyx_pw_8pysndlib_3clm_183table_lookup(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen = 0;
  PyObject *__pyx_v_fm = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("table_lookup (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_gen,&__pyx_n_s_fm,0};
    PyObject* values[2] = {0,0};
    values[1] = ((PyObject *)Py_None);
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_gen)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1985, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_fm);
          if (value) { values[1] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1985, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "table_lookup") < 0)) __PYX_ERR(0, 1985, __pyx_L3_error)
      }
    } else {
      switch (__pyx_nargs) {
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_gen = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)values[0]);
    __pyx_v_fm = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("table_lookup", 0, 1, 2, __pyx_nargs); __PYX_ERR(0, 1985, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.table_lookup", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_gen), __pyx_ptype_8pysndlib_3clm_mus_any, 0, "gen", 0))) __PYX_ERR(0, 1985, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pysndlib_3clm_182table_lookup(__pyx_self, __pyx_v_gen, __pyx_v_fm);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_182table_lookup(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen, PyObject *__pyx_v_fm) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("table_lookup", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2.__pyx_n = 1;
  __pyx_t_2.fm = __pyx_v_fm;
  __pyx_t_1 = __pyx_f_8pysndlib_3clm_table_lookup(__pyx_v_gen, 0, &__pyx_t_2); if (unlikely(__pyx_t_1 == ((double)-1) && PyErr_Occurred())) __PYX_ERR(0, 1985, __pyx_L1_error)
  __pyx_t_3 = PyFloat_FromDouble(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1985, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_r = __pyx_t_3;
  __pyx_t_3 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("pysndlib.clm.table_lookup", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_41 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 1985, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  if (PyDict_SetItem(__pyx_t_41, __pyx_n_s_gen, __pyx_n_s_mus_any) < 0) __PYX_ERR(0, 1985, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_41, __pyx_n_s_fm, __pyx_kp_s_Optional_float) < 0) __PYX_ERR(0, 1985, __pyx_L1_error)
  __pyx_t_37 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_183table_lookup, 0, __pyx_n_s_table_lookup, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__262)); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 1985, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_37, __pyx_tuple__258);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_37, __pyx_t_41);
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_table_lookup, __pyx_t_37) < 0) __PYX_ERR(0, 1985, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
/* … */
  __pyx_codeobj__262 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__256, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_table_lookup, 1985, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__262)) __PYX_ERR(0, 1985, __pyx_L1_error)
/* … */
struct __pyx_opt_args_8pysndlib_3clm_table_lookup {
  int __pyx_n;
  PyObject *fm;
};
 1986:     """
 1987:     return next sample from table_lookup generator.
 1988:     
 1989:     :param gen: table_lookup gen
 1990:     :param fm: fm input
 1991:     :rtype: float
 1992:     """
+1993:     if fm:
  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_fm); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 1993, __pyx_L1_error)
  if (__pyx_t_1) {
/* … */
  }
+1994:         return cclm.mus_table_lookup(gen._ptr, fm)
    __pyx_t_2 = __pyx_PyFloat_AsDouble(__pyx_v_fm); if (unlikely((__pyx_t_2 == ((mus_float_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 1994, __pyx_L1_error)
    __pyx_r = mus_table_lookup(__pyx_v_gen->_ptr, __pyx_t_2);
    goto __pyx_L0;
 1995:     else:
+1996:         return cclm.mus_table_lookup_unmodulated(gen._ptr)
  /*else*/ {
    __pyx_r = mus_table_lookup_unmodulated(__pyx_v_gen->_ptr);
    goto __pyx_L0;
  }
 1997: 
+1998: cpdef bint is_table_lookup(gen: mus_any):
static PyObject *__pyx_pw_8pysndlib_3clm_185is_table_lookup(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static int __pyx_f_8pysndlib_3clm_is_table_lookup(struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen, CYTHON_UNUSED int __pyx_skip_dispatch) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_table_lookup", 0);
/* … */
  /* function exit code */
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_185is_table_lookup(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_184is_table_lookup, "\n    returns True if gen is a table_lookup.\n    \n    :param gen: gen\n    :rtype: bool\n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_185is_table_lookup = {"is_table_lookup", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_185is_table_lookup, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_184is_table_lookup};
static PyObject *__pyx_pw_8pysndlib_3clm_185is_table_lookup(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_table_lookup (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_gen,0};
    PyObject* values[1] = {0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_gen)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1998, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "is_table_lookup") < 0)) __PYX_ERR(0, 1998, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
    }
    __pyx_v_gen = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)values[0]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("is_table_lookup", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 1998, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.is_table_lookup", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_gen), __pyx_ptype_8pysndlib_3clm_mus_any, 0, "gen", 0))) __PYX_ERR(0, 1998, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pysndlib_3clm_184is_table_lookup(__pyx_self, __pyx_v_gen);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_184is_table_lookup(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_table_lookup", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_8pysndlib_3clm_is_table_lookup(__pyx_v_gen, 0); if (unlikely(__pyx_t_1 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1998, __pyx_L1_error)
  __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1998, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pysndlib.clm.is_table_lookup", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_37 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 1998, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  if (PyDict_SetItem(__pyx_t_37, __pyx_n_s_gen, __pyx_n_s_mus_any) < 0) __PYX_ERR(0, 1998, __pyx_L1_error)
  __pyx_t_41 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_185is_table_lookup, 0, __pyx_n_s_is_table_lookup, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__263)); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 1998, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_41, __pyx_t_37);
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_is_table_lookup, __pyx_t_41) < 0) __PYX_ERR(0, 1998, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
/* … */
  __pyx_codeobj__263 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__46, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_is_table_lookup, 1998, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__263)) __PYX_ERR(0, 1998, __pyx_L1_error)
 1999:     """
 2000:     returns True if gen is a table_lookup.
 2001:     
 2002:     :param gen: gen
 2003:     :rtype: bool
 2004:     """
+2005:     return cclm.mus_is_table_lookup(gen._ptr)
  __pyx_r = mus_is_table_lookup(__pyx_v_gen->_ptr);
  goto __pyx_L0;
 2006: 
 2007: 
+2008: cpdef mus_any make_table_lookup_with_env(frequency: cython.double, envelope, size=None):
static PyObject *__pyx_pw_8pysndlib_3clm_187make_table_lookup_with_env(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_f_8pysndlib_3clm_make_table_lookup_with_env(double __pyx_v_frequency, PyObject *__pyx_v_envelope, CYTHON_UNUSED int __pyx_skip_dispatch, struct __pyx_opt_args_8pysndlib_3clm_make_table_lookup_with_env *__pyx_optional_args) {
  PyObject *__pyx_v_size = ((PyObject *)Py_None);
  PyObject *__pyx_v_table = NULL;
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_e = NULL;
  PyObject *__pyx_v_i = NULL;
  __Pyx_memviewslice __pyx_v_table_view = { 0, 0, { 0 }, { 0 }, { 0 } };
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen = NULL;
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("make_table_lookup_with_env", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_size = __pyx_optional_args->size;
    }
  }
  __Pyx_INCREF(__pyx_v_size);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __PYX_XCLEAR_MEMVIEW(&__pyx_t_11, 1);
  __Pyx_AddTraceback("pysndlib.clm.make_table_lookup_with_env", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_table);
  __Pyx_XDECREF((PyObject *)__pyx_v_e);
  __Pyx_XDECREF(__pyx_v_i);
  __PYX_XCLEAR_MEMVIEW(&__pyx_v_table_view, 1);
  __Pyx_XDECREF((PyObject *)__pyx_v_gen);
  __Pyx_XDECREF(__pyx_v_size);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_187make_table_lookup_with_env(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_186make_table_lookup_with_env, "\n    return a new table_lookup generator with the envelope loaded \\in with size.\n    \n    :param frequency: frequency of gen \\in hz\n    :param env: envelope shape to load into generator\n    :param size: size of table derived from envelope\n    :return: table_lookup gen\n    :rtype: mus_any\n    \n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_187make_table_lookup_with_env = {"make_table_lookup_with_env", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_187make_table_lookup_with_env, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_186make_table_lookup_with_env};
static PyObject *__pyx_pw_8pysndlib_3clm_187make_table_lookup_with_env(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  double __pyx_v_frequency;
  PyObject *__pyx_v_envelope = 0;
  PyObject *__pyx_v_size = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("make_table_lookup_with_env (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_frequency,&__pyx_n_s_envelope,&__pyx_n_s_size,0};
    PyObject* values[3] = {0,0,0};
    values[2] = ((PyObject *)Py_None);
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_frequency)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 2008, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_envelope)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 2008, __pyx_L3_error)
        else {
          __Pyx_RaiseArgtupleInvalid("make_table_lookup_with_env", 0, 2, 3, 1); __PYX_ERR(0, 2008, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_size);
          if (value) { values[2] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 2008, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "make_table_lookup_with_env") < 0)) __PYX_ERR(0, 2008, __pyx_L3_error)
      }
    } else {
      switch (__pyx_nargs) {
        case  3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_frequency = __pyx_PyFloat_AsDouble(values[0]); if (unlikely((__pyx_v_frequency == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 2008, __pyx_L3_error)
    __pyx_v_envelope = values[1];
    __pyx_v_size = values[2];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("make_table_lookup_with_env", 0, 2, 3, __pyx_nargs); __PYX_ERR(0, 2008, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.make_table_lookup_with_env", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pysndlib_3clm_186make_table_lookup_with_env(__pyx_self, __pyx_v_frequency, __pyx_v_envelope, __pyx_v_size);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_186make_table_lookup_with_env(CYTHON_UNUSED PyObject *__pyx_self, double __pyx_v_frequency, PyObject *__pyx_v_envelope, PyObject *__pyx_v_size) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("make_table_lookup_with_env", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2.__pyx_n = 1;
  __pyx_t_2.size = __pyx_v_size;
  __pyx_t_1 = ((PyObject *)__pyx_f_8pysndlib_3clm_make_table_lookup_with_env(__pyx_v_frequency, __pyx_v_envelope, 0, &__pyx_t_2)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2008, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pysndlib.clm.make_table_lookup_with_env", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__264 = PyTuple_Pack(3, __pyx_n_s_frequency, __pyx_n_s_envelope, __pyx_n_s_size); if (unlikely(!__pyx_tuple__264)) __PYX_ERR(0, 2008, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__264);
  __Pyx_GIVEREF(__pyx_tuple__264);
/* … */
  __pyx_t_41 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 2008, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  if (PyDict_SetItem(__pyx_t_41, __pyx_n_s_frequency, __pyx_kp_s_cython_double) < 0) __PYX_ERR(0, 2008, __pyx_L1_error)
  __pyx_t_37 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_187make_table_lookup_with_env, 0, __pyx_n_s_make_table_lookup_with_env, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__265)); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 2008, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_37, __pyx_tuple__258);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_37, __pyx_t_41);
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_make_table_lookup_with_env, __pyx_t_37) < 0) __PYX_ERR(0, 2008, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
  __pyx_codeobj__265 = (PyObject*)__Pyx_PyCode_New(3, 0, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__264, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_make_table_lookup_with_env, 2008, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__265)) __PYX_ERR(0, 2008, __pyx_L1_error)
/* … */
struct __pyx_opt_args_8pysndlib_3clm_make_table_lookup_with_env {
  int __pyx_n;
  PyObject *size;
};
 2009:     """
 2010:     return a new table_lookup generator with the envelope loaded \in with size.
 2011:     
 2012:     :param frequency: frequency of gen \in hz
 2013:     :param env: envelope shape to load into generator
 2014:     :param size: size of table derived from envelope
 2015:     :return: table_lookup gen
 2016:     :rtype: mus_any
 2017:     
 2018:     """
 2019: 
+2020:     check_range('frequency', frequency, 0.0, get_srate() / 2)
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_check_range); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2020, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = PyFloat_FromDouble(__pyx_v_frequency); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2020, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = __pyx_f_8pysndlib_3clm_get_srate(0); if (unlikely(__pyx_t_4 == ((double)-1) && PyErr_Occurred())) __PYX_ERR(0, 2020, __pyx_L1_error)
  __pyx_t_5 = PyFloat_FromDouble((__pyx_t_4 / 2.0)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2020, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_6 = NULL;
  __pyx_t_7 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_6)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_6);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
      __pyx_t_7 = 1;
    }
  }
  {
    PyObject *__pyx_callargs[5] = {__pyx_t_6, __pyx_n_s_frequency, __pyx_t_3, __pyx_float_0_0, __pyx_t_5};
    __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_7, 4+__pyx_t_7);
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2020, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 2021: 
+2022:     size = size or CLM.table_size
  __pyx_t_8 = __Pyx_PyObject_IsTrue(__pyx_v_size); if (unlikely((__pyx_t_8 < 0))) __PYX_ERR(0, 2022, __pyx_L1_error)
  if (!__pyx_t_8) {
  } else {
    __Pyx_INCREF(__pyx_v_size);
    __pyx_t_1 = __pyx_v_size;
    goto __pyx_L3_bool_binop_done;
  }
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_CLM); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2022, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_table_size); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2022, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_INCREF(__pyx_t_5);
  __pyx_t_1 = __pyx_t_5;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_L3_bool_binop_done:;
  __Pyx_DECREF_SET(__pyx_v_size, __pyx_t_1);
  __pyx_t_1 = 0;
+2023:     table = np.zeros(size)
  __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_np); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2023, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_zeros); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2023, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_5 = NULL;
  __pyx_t_7 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_5)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_5);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
      __pyx_t_7 = 1;
    }
  }
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_v_size};
    __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_7, 1+__pyx_t_7);
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2023, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  }
  __pyx_v_table = __pyx_t_1;
  __pyx_t_1 = 0;
+2024:     e = make_env(envelope, length=size)
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_make_env); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2024, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2024, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(__pyx_v_envelope);
  __Pyx_GIVEREF(__pyx_v_envelope);
  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_envelope);
  __pyx_t_5 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2024, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_length, __pyx_v_size) < 0) __PYX_ERR(0, 2024, __pyx_L1_error)
  __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_2, __pyx_t_5); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2024, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_8pysndlib_3clm_mus_any))))) __PYX_ERR(0, 2024, __pyx_L1_error)
  __pyx_v_e = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)__pyx_t_3);
  __pyx_t_3 = 0;
+2025:     for i in range(size):
  __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_builtin_range, __pyx_v_size); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2025, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (likely(PyList_CheckExact(__pyx_t_3)) || PyTuple_CheckExact(__pyx_t_3)) {
    __pyx_t_5 = __pyx_t_3; __Pyx_INCREF(__pyx_t_5); __pyx_t_9 = 0;
    __pyx_t_10 = NULL;
  } else {
    __pyx_t_9 = -1; __pyx_t_5 = PyObject_GetIter(__pyx_t_3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2025, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_10 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_5); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 2025, __pyx_L1_error)
  }
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  for (;;) {
    if (likely(!__pyx_t_10)) {
      if (likely(PyList_CheckExact(__pyx_t_5))) {
        if (__pyx_t_9 >= PyList_GET_SIZE(__pyx_t_5)) break;
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_3 = PyList_GET_ITEM(__pyx_t_5, __pyx_t_9); __Pyx_INCREF(__pyx_t_3); __pyx_t_9++; if (unlikely((0 < 0))) __PYX_ERR(0, 2025, __pyx_L1_error)
        #else
        __pyx_t_3 = PySequence_ITEM(__pyx_t_5, __pyx_t_9); __pyx_t_9++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2025, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        #endif
      } else {
        if (__pyx_t_9 >= PyTuple_GET_SIZE(__pyx_t_5)) break;
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_3 = PyTuple_GET_ITEM(__pyx_t_5, __pyx_t_9); __Pyx_INCREF(__pyx_t_3); __pyx_t_9++; if (unlikely((0 < 0))) __PYX_ERR(0, 2025, __pyx_L1_error)
        #else
        __pyx_t_3 = PySequence_ITEM(__pyx_t_5, __pyx_t_9); __pyx_t_9++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2025, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        #endif
      }
    } else {
      __pyx_t_3 = __pyx_t_10(__pyx_t_5);
      if (unlikely(!__pyx_t_3)) {
        PyObject* exc_type = PyErr_Occurred();
        if (exc_type) {
          if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
          else __PYX_ERR(0, 2025, __pyx_L1_error)
        }
        break;
      }
      __Pyx_GOTREF(__pyx_t_3);
    }
    __Pyx_XDECREF_SET(__pyx_v_i, __pyx_t_3);
    __pyx_t_3 = 0;
/* … */
  }
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+2026:         table[i] = env(e)
    __pyx_t_4 = __pyx_f_8pysndlib_3clm_env(__pyx_v_e, 0); if (unlikely(__pyx_t_4 == ((double)-1) && PyErr_Occurred())) __PYX_ERR(0, 2026, __pyx_L1_error)
    __pyx_t_3 = PyFloat_FromDouble(__pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2026, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    if (unlikely((PyObject_SetItem(__pyx_v_table, __pyx_v_i, __pyx_t_3) < 0))) __PYX_ERR(0, 2026, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+2027:     cdef double [:] table_view = table
  __pyx_t_11 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_table, PyBUF_WRITABLE); if (unlikely(!__pyx_t_11.memview)) __PYX_ERR(0, 2027, __pyx_L1_error)
  __pyx_v_table_view = __pyx_t_11;
  __pyx_t_11.memview = NULL;
  __pyx_t_11.data = NULL;
 2028: 
+2029:     gen =  mus_any.from_ptr(cclm.mus_make_table_lookup(frequency, 0, &table_view[0], size, <cclm.mus_interp_t>Interp.LINEAR))
  __pyx_t_12 = 0;
  __pyx_t_7 = -1;
  if (__pyx_t_12 < 0) {
    __pyx_t_12 += __pyx_v_table_view.shape[0];
    if (unlikely(__pyx_t_12 < 0)) __pyx_t_7 = 0;
  } else if (unlikely(__pyx_t_12 >= __pyx_v_table_view.shape[0])) __pyx_t_7 = 0;
  if (unlikely(__pyx_t_7 != -1)) {
    __Pyx_RaiseBufferIndexError(__pyx_t_7);
    __PYX_ERR(0, 2029, __pyx_L1_error)
  }
  __pyx_t_13 = __Pyx_PyInt_As_mus_long_t(__pyx_v_size); if (unlikely((__pyx_t_13 == ((mus_long_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 2029, __pyx_L1_error)
  __pyx_t_5 = ((PyObject *)__pyx_vtabptr_8pysndlib_3clm_mus_any->from_ptr(mus_make_table_lookup(__pyx_v_frequency, 0.0, (&(*((double *) ( /* dim=0 */ (__pyx_v_table_view.data + __pyx_t_12 * __pyx_v_table_view.strides[0]) )))), __pyx_t_13, ((mus_interp_t)__pyx_e_8pysndlib_3clm_LINEAR)), NULL)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2029, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_v_gen = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)__pyx_t_5);
  __pyx_t_5 = 0;
+2030:     gen.cache_append(table)
  __pyx_t_5 = ((struct __pyx_vtabstruct_8pysndlib_3clm_mus_any *)__pyx_v_gen->__pyx_vtab)->cache_append(__pyx_v_gen, __pyx_v_table, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2030, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+2031:     return gen
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __Pyx_INCREF((PyObject *)__pyx_v_gen);
  __pyx_r = __pyx_v_gen;
  goto __pyx_L0;
 2032: 
 2033: # ---------------- polywave ---------------- #
+2034: cpdef mus_any make_polywave(frequency: float,  partials = [0.,1.],
static PyObject *__pyx_pw_8pysndlib_3clm_189make_polywave(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_f_8pysndlib_3clm_make_polywave(double __pyx_v_frequency, CYTHON_UNUSED int __pyx_skip_dispatch, struct __pyx_opt_args_8pysndlib_3clm_make_polywave *__pyx_optional_args) {
  PyObject *__pyx_v_partials = __pyx_k__24;
  PyObject *__pyx_v_kind = __pyx_k__25;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __PYX_XCLEAR_MEMVIEW(&__pyx_t_8, 1);
  __Pyx_AddTraceback("pysndlib.clm.make_polywave", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __PYX_XCLEAR_MEMVIEW(&__pyx_v_xcoeffs_view, 1);
  __PYX_XCLEAR_MEMVIEW(&__pyx_v_ycoeffs_view, 1);
  __PYX_XCLEAR_MEMVIEW(&__pyx_v_prtls_view, 1);
  __Pyx_XDECREF((PyObject *)__pyx_v_gen);
  __Pyx_XDECREF(__pyx_v_prtls);
  __Pyx_XDECREF(__pyx_v_xcoeffs);
  __Pyx_XDECREF(__pyx_v_ycoeffs);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_189make_polywave(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_188make_polywave, "\n    return a new polynomial-based waveshaping generator. make_polywave(440.0, partials=[1.0,1.0]) is\n    the same \\in effect as make_oscil.\n    \n    :param frequency: polywave frequency\n    :param partials: a list of harmonic numbers and their associated amplitudes\n    :param kind: Chebyshev polynomial choice\n    :param xcoeffs: tn for tu-sum case\n    :param ycoeffs: un for tu-sum case\n    :return: polywave gen\n    :rtype: mus_any\n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_189make_polywave = {"make_polywave", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_189make_polywave, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_188make_polywave};
static PyObject *__pyx_pw_8pysndlib_3clm_189make_polywave(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  double __pyx_v_frequency;
  PyObject *__pyx_v_partials = 0;
  PyObject *__pyx_v_kind = 0;
  PyObject *__pyx_v_xcoeffs = 0;
  PyObject *__pyx_v_ycoeffs = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("make_polywave (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_frequency,&__pyx_n_s_partials,&__pyx_n_s_kind,&__pyx_n_s_xcoeffs,&__pyx_n_s_ycoeffs,0};
    PyObject* values[5] = {0,0,0,0,0};
    values[1] = __pyx_k__24;
    values[2] = __pyx_k__25;
/* … */
  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_188make_polywave(CYTHON_UNUSED PyObject *__pyx_self, double __pyx_v_frequency, PyObject *__pyx_v_partials, PyObject *__pyx_v_kind, PyObject *__pyx_v_xcoeffs, PyObject *__pyx_v_ycoeffs) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("make_polywave", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2.__pyx_n = 4;
  __pyx_t_2.partials = __pyx_v_partials;
  __pyx_t_2.kind = __pyx_v_kind;
  __pyx_t_2.xcoeffs = __pyx_v_xcoeffs;
  __pyx_t_2.ycoeffs = __pyx_v_ycoeffs;
  __pyx_t_1 = ((PyObject *)__pyx_f_8pysndlib_3clm_make_polywave(__pyx_v_frequency, 0, &__pyx_t_2)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2034, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pysndlib.clm.make_polywave", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_37 = PyList_New(2); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 2034, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  __Pyx_INCREF(__pyx_float_0_);
  __Pyx_GIVEREF(__pyx_float_0_);
  PyList_SET_ITEM(__pyx_t_37, 0, __pyx_float_0_);
  __Pyx_INCREF(__pyx_float_1_);
  __Pyx_GIVEREF(__pyx_float_1_);
  PyList_SET_ITEM(__pyx_t_37, 1, __pyx_float_1_);
  __pyx_k__24 = __pyx_t_37;
  __Pyx_GIVEREF(__pyx_t_37);
  __pyx_t_37 = 0;
/* … */
  __pyx_tuple__266 = PyTuple_Pack(5, __pyx_n_s_frequency, __pyx_n_s_partials, __pyx_n_s_kind, __pyx_n_s_xcoeffs, __pyx_n_s_ycoeffs); if (unlikely(!__pyx_tuple__266)) __PYX_ERR(0, 2034, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__266);
  __Pyx_GIVEREF(__pyx_tuple__266);
/* … */
  __pyx_t_37 = PyList_New(2); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 2034, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  __Pyx_INCREF(__pyx_float_0_);
  __Pyx_GIVEREF(__pyx_float_0_);
  PyList_SET_ITEM(__pyx_t_37, 0, __pyx_float_0_);
  __Pyx_INCREF(__pyx_float_1_);
  __Pyx_GIVEREF(__pyx_float_1_);
  PyList_SET_ITEM(__pyx_t_37, 1, __pyx_float_1_);
/* … */
  __pyx_t_40 = PyTuple_New(4); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 2034, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  __Pyx_GIVEREF(__pyx_t_37);
  PyTuple_SET_ITEM(__pyx_t_40, 0, __pyx_t_37);
  __Pyx_GIVEREF(__pyx_t_41);
  PyTuple_SET_ITEM(__pyx_t_40, 1, __pyx_t_41);
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  PyTuple_SET_ITEM(__pyx_t_40, 2, Py_None);
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  PyTuple_SET_ITEM(__pyx_t_40, 3, Py_None);
  __pyx_t_37 = 0;
  __pyx_t_41 = 0;
  __pyx_t_41 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 2034, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  if (PyDict_SetItem(__pyx_t_41, __pyx_n_s_frequency, __pyx_n_s_float) < 0) __PYX_ERR(0, 2034, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_41, __pyx_n_s_kind, __pyx_kp_s_Optional_int) < 0) __PYX_ERR(0, 2034, __pyx_L1_error)
  __pyx_t_37 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_189make_polywave, 0, __pyx_n_s_make_polywave, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__267)); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 2034, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_37, __pyx_t_40);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_37, __pyx_t_41);
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_make_polywave, __pyx_t_37) < 0) __PYX_ERR(0, 2034, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
  __pyx_codeobj__267 = (PyObject*)__Pyx_PyCode_New(5, 0, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__266, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_make_polywave, 2034, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__267)) __PYX_ERR(0, 2034, __pyx_L1_error)
/* … */
struct __pyx_opt_args_8pysndlib_3clm_make_polywave {
  int __pyx_n;
  PyObject *partials;
  PyObject *kind;
  PyObject *xcoeffs;
  PyObject *ycoeffs;
};
+2035:                     kind: Optional[int]=Polynomial.FIRST_KIND,
  __pyx_t_37 = __Pyx_Enum_Polynomial_to_py(__pyx_e_8pysndlib_3clm_FIRST_KIND); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 2035, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  __pyx_k__25 = __pyx_t_37;
  __Pyx_GIVEREF(__pyx_t_37);
  __pyx_t_37 = 0;
/* … */
  __pyx_t_41 = __Pyx_Enum_Polynomial_to_py(__pyx_e_8pysndlib_3clm_FIRST_KIND); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 2035, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
+2036:                     xcoeffs = None,
  PyObject *__pyx_v_xcoeffs = ((PyObject *)Py_None);
/* … */
    values[3] = ((PyObject *)Py_None);
+2037:                     ycoeffs = None):
  PyObject *__pyx_v_ycoeffs = ((PyObject *)Py_None);
  __Pyx_memviewslice __pyx_v_xcoeffs_view = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_ycoeffs_view = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_prtls_view = { 0, 0, { 0 }, { 0 }, { 0 } };
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen = NULL;
  PyObject *__pyx_v_prtls = NULL;
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("make_polywave", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_partials = __pyx_optional_args->partials;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_kind = __pyx_optional_args->kind;
        if (__pyx_optional_args->__pyx_n > 2) {
          __pyx_v_xcoeffs = __pyx_optional_args->xcoeffs;
          if (__pyx_optional_args->__pyx_n > 3) {
            __pyx_v_ycoeffs = __pyx_optional_args->ycoeffs;
          }
        }
      }
    }
  }
  __Pyx_INCREF(__pyx_v_xcoeffs);
  __Pyx_INCREF(__pyx_v_ycoeffs);
/* … */
    values[4] = ((PyObject *)Py_None);
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  5: values[4] = __Pyx_Arg_FASTCALL(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_frequency)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 2034, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_partials);
          if (value) { values[1] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 2034, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_kind);
          if (value) { values[2] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 2034, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_xcoeffs);
          if (value) { values[3] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 2034, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_ycoeffs);
          if (value) { values[4] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 2034, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "make_polywave") < 0)) __PYX_ERR(0, 2034, __pyx_L3_error)
      }
    } else {
      switch (__pyx_nargs) {
        case  5: values[4] = __Pyx_Arg_FASTCALL(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_frequency = __pyx_PyFloat_AsDouble(values[0]); if (unlikely((__pyx_v_frequency == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 2034, __pyx_L3_error)
    __pyx_v_partials = values[1];
    __pyx_v_kind = values[2];
    __pyx_v_xcoeffs = values[3];
    __pyx_v_ycoeffs = values[4];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("make_polywave", 0, 1, 5, __pyx_nargs); __PYX_ERR(0, 2034, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.make_polywave", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pysndlib_3clm_188make_polywave(__pyx_self, __pyx_v_frequency, __pyx_v_partials, __pyx_v_kind, __pyx_v_xcoeffs, __pyx_v_ycoeffs);
 2038:     """
 2039:     return a new polynomial-based waveshaping generator. make_polywave(440.0, partials=[1.0,1.0]) is
 2040:     the same \in effect as make_oscil.
 2041:     
 2042:     :param frequency: polywave frequency
 2043:     :param partials: a list of harmonic numbers and their associated amplitudes
 2044:     :param kind: Chebyshev polynomial choice
 2045:     :param xcoeffs: tn for tu-sum case
 2046:     :param ycoeffs: un for tu-sum case
 2047:     :return: polywave gen
 2048:     :rtype: mus_any
 2049:     """
 2050: 
+2051:     check_range('frequency', frequency, 0.0, get_srate() / 2)
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_check_range); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2051, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = PyFloat_FromDouble(__pyx_v_frequency); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2051, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = __pyx_f_8pysndlib_3clm_get_srate(0); if (unlikely(__pyx_t_4 == ((double)-1) && PyErr_Occurred())) __PYX_ERR(0, 2051, __pyx_L1_error)
  __pyx_t_5 = PyFloat_FromDouble((__pyx_t_4 / 2.0)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2051, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_6 = NULL;
  __pyx_t_7 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_6)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_6);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
      __pyx_t_7 = 1;
    }
  }
  {
    PyObject *__pyx_callargs[5] = {__pyx_t_6, __pyx_n_s_frequency, __pyx_t_3, __pyx_float_0_0, __pyx_t_5};
    __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_7, 4+__pyx_t_7);
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2051, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 2052: 
+2053:     cdef double [:] xcoeffs_view = None
  __pyx_t_8 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(Py_None, PyBUF_WRITABLE); if (unlikely(!__pyx_t_8.memview)) __PYX_ERR(0, 2053, __pyx_L1_error)
  __pyx_v_xcoeffs_view = __pyx_t_8;
  __pyx_t_8.memview = NULL;
  __pyx_t_8.data = NULL;
+2054:     cdef double [:] ycoeffs_view = None
  __pyx_t_8 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(Py_None, PyBUF_WRITABLE); if (unlikely(!__pyx_t_8.memview)) __PYX_ERR(0, 2054, __pyx_L1_error)
  __pyx_v_ycoeffs_view = __pyx_t_8;
  __pyx_t_8.memview = NULL;
  __pyx_t_8.data = NULL;
+2055:     cdef double [:] prtls_view = None
  __pyx_t_8 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(Py_None, PyBUF_WRITABLE); if (unlikely(!__pyx_t_8.memview)) __PYX_ERR(0, 2055, __pyx_L1_error)
  __pyx_v_prtls_view = __pyx_t_8;
  __pyx_t_8.memview = NULL;
  __pyx_t_8.data = NULL;
 2056: 
+2057:     if(isinstance(xcoeffs, np.ndarray | list) ) and (isinstance(ycoeffs, np.ndarray | list)): # should check they are same length
  __pyx_t_1 = PyNumber_Or(((PyObject *)__pyx_ptype_5numpy_ndarray), ((PyObject *)(&PyList_Type))); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2057, __pyx_L1_error)
  __Pyx_GOTREF((PyObject *)__pyx_t_1);
  __pyx_t_10 = __Pyx_TypeCheck(__pyx_v_xcoeffs, __pyx_t_1); 
  __Pyx_DECREF((PyObject *)__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_10) {
  } else {
    __pyx_t_9 = __pyx_t_10;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_1 = PyNumber_Or(((PyObject *)__pyx_ptype_5numpy_ndarray), ((PyObject *)(&PyList_Type))); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2057, __pyx_L1_error)
  __Pyx_GOTREF((PyObject *)__pyx_t_1);
  __pyx_t_10 = __Pyx_TypeCheck(__pyx_v_ycoeffs, __pyx_t_1); 
  __Pyx_DECREF((PyObject *)__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_9 = __pyx_t_10;
  __pyx_L4_bool_binop_done:;
  if (__pyx_t_9) {
/* … */
  }
+2058:         xcoeffs = np.array(xcoeffs, dtype=np.double)
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2058, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_array); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2058, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2058, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_INCREF(__pyx_v_xcoeffs);
    __Pyx_GIVEREF(__pyx_v_xcoeffs);
    PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_xcoeffs);
    __pyx_t_5 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2058, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2058, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_double); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2058, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_dtype, __pyx_t_6) < 0) __PYX_ERR(0, 2058, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_1, __pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2058, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF_SET(__pyx_v_xcoeffs, __pyx_t_6);
    __pyx_t_6 = 0;
+2059:         xcoeffs_view = xcoeffs
    __pyx_t_8 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_xcoeffs, PyBUF_WRITABLE); if (unlikely(!__pyx_t_8.memview)) __PYX_ERR(0, 2059, __pyx_L1_error)
    __PYX_XCLEAR_MEMVIEW(&__pyx_v_xcoeffs_view, 1);
    __pyx_v_xcoeffs_view = __pyx_t_8;
    __pyx_t_8.memview = NULL;
    __pyx_t_8.data = NULL;
+2060:         ycoeffs = np.array(ycoeffs, dtype=np.double)
    __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_np); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2060, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_array); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2060, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2060, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_INCREF(__pyx_v_ycoeffs);
    __Pyx_GIVEREF(__pyx_v_ycoeffs);
    PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_v_ycoeffs);
    __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2060, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2060, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_double); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2060, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_t_3) < 0) __PYX_ERR(0, 2060, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_6, __pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2060, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_DECREF_SET(__pyx_v_ycoeffs, __pyx_t_3);
    __pyx_t_3 = 0;
+2061:         ycoeffs_view = ycoeffs
    __pyx_t_8 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_ycoeffs, PyBUF_WRITABLE); if (unlikely(!__pyx_t_8.memview)) __PYX_ERR(0, 2061, __pyx_L1_error)
    __PYX_XCLEAR_MEMVIEW(&__pyx_v_ycoeffs_view, 1);
    __pyx_v_ycoeffs_view = __pyx_t_8;
    __pyx_t_8.memview = NULL;
    __pyx_t_8.data = NULL;
+2062:         check_ndim(xcoeffs)
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_check_ndim); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2062, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_6 = NULL;
    __pyx_t_7 = 0;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) {
      __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_1);
      if (likely(__pyx_t_6)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
        __Pyx_INCREF(__pyx_t_6);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_1, function);
        __pyx_t_7 = 1;
      }
    }
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_v_xcoeffs};
      __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_7, 1+__pyx_t_7);
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2062, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    }
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+2063:         check_ndim(ycoeffs)
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_check_ndim); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2063, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_6 = NULL;
    __pyx_t_7 = 0;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) {
      __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_1);
      if (likely(__pyx_t_6)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
        __Pyx_INCREF(__pyx_t_6);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_1, function);
        __pyx_t_7 = 1;
      }
    }
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_v_ycoeffs};
      __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_7, 1+__pyx_t_7);
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2063, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    }
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+2064:         compare_shapes(xcoeffs, ycoeffs)
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_compare_shapes); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2064, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_6 = NULL;
    __pyx_t_7 = 0;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) {
      __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_1);
      if (likely(__pyx_t_6)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
        __Pyx_INCREF(__pyx_t_6);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_1, function);
        __pyx_t_7 = 1;
      }
    }
    {
      PyObject *__pyx_callargs[3] = {__pyx_t_6, __pyx_v_xcoeffs, __pyx_v_ycoeffs};
      __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_7, 2+__pyx_t_7);
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2064, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    }
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 2065: 
+2066:         gen = mus_any.from_ptr(cclm.mus_make_polywave_tu(frequency,&xcoeffs_view[0],&ycoeffs_view[0], len(xcoeffs)))
    __pyx_t_11 = 0;
    __pyx_t_7 = -1;
    if (__pyx_t_11 < 0) {
      __pyx_t_11 += __pyx_v_xcoeffs_view.shape[0];
      if (unlikely(__pyx_t_11 < 0)) __pyx_t_7 = 0;
    } else if (unlikely(__pyx_t_11 >= __pyx_v_xcoeffs_view.shape[0])) __pyx_t_7 = 0;
    if (unlikely(__pyx_t_7 != -1)) {
      __Pyx_RaiseBufferIndexError(__pyx_t_7);
      __PYX_ERR(0, 2066, __pyx_L1_error)
    }
    __pyx_t_12 = 0;
    __pyx_t_7 = -1;
    if (__pyx_t_12 < 0) {
      __pyx_t_12 += __pyx_v_ycoeffs_view.shape[0];
      if (unlikely(__pyx_t_12 < 0)) __pyx_t_7 = 0;
    } else if (unlikely(__pyx_t_12 >= __pyx_v_ycoeffs_view.shape[0])) __pyx_t_7 = 0;
    if (unlikely(__pyx_t_7 != -1)) {
      __Pyx_RaiseBufferIndexError(__pyx_t_7);
      __PYX_ERR(0, 2066, __pyx_L1_error)
    }
    __pyx_t_13 = PyObject_Length(__pyx_v_xcoeffs); if (unlikely(__pyx_t_13 == ((Py_ssize_t)-1))) __PYX_ERR(0, 2066, __pyx_L1_error)
    __pyx_t_3 = ((PyObject *)__pyx_vtabptr_8pysndlib_3clm_mus_any->from_ptr(mus_make_polywave_tu(__pyx_v_frequency, (&(*((double *) ( /* dim=0 */ (__pyx_v_xcoeffs_view.data + __pyx_t_11 * __pyx_v_xcoeffs_view.strides[0]) )))), (&(*((double *) ( /* dim=0 */ (__pyx_v_ycoeffs_view.data + __pyx_t_12 * __pyx_v_ycoeffs_view.strides[0]) )))), __pyx_t_13), NULL)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2066, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_v_gen = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)__pyx_t_3);
    __pyx_t_3 = 0;
+2067:         gen.cache_extend([xcoeffs, ycoeffs])
    __pyx_t_3 = PyList_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2067, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_INCREF(__pyx_v_xcoeffs);
    __Pyx_GIVEREF(__pyx_v_xcoeffs);
    PyList_SET_ITEM(__pyx_t_3, 0, __pyx_v_xcoeffs);
    __Pyx_INCREF(__pyx_v_ycoeffs);
    __Pyx_GIVEREF(__pyx_v_ycoeffs);
    PyList_SET_ITEM(__pyx_t_3, 1, __pyx_v_ycoeffs);
    __pyx_t_1 = ((struct __pyx_vtabstruct_8pysndlib_3clm_mus_any *)__pyx_v_gen->__pyx_vtab)->cache_extend(__pyx_v_gen, __pyx_t_3, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2067, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+2068:         return gen
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __Pyx_INCREF((PyObject *)__pyx_v_gen);
    __pyx_r = __pyx_v_gen;
    goto __pyx_L0;
 2069:     else:
+2070:         prtls = to_partials(partials)
  /*else*/ {
    __pyx_t_1 = ((PyObject *)__pyx_f_8pysndlib_3clm_to_partials(__pyx_v_partials, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2070, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_v_prtls = __pyx_t_1;
    __pyx_t_1 = 0;
 2071: 
+2072:         prtls = np.array(prtls, dtype=np.double)
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2072, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_array); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2072, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2072, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_INCREF(__pyx_v_prtls);
    __Pyx_GIVEREF(__pyx_v_prtls);
    PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_prtls);
    __pyx_t_6 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2072, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_np); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2072, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_double); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2072, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_dtype, __pyx_t_2) < 0) __PYX_ERR(0, 2072, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_1, __pyx_t_6); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2072, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_DECREF_SET(__pyx_v_prtls, __pyx_t_2);
    __pyx_t_2 = 0;
+2073:         prtls_view = prtls
    __pyx_t_8 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_prtls, PyBUF_WRITABLE); if (unlikely(!__pyx_t_8.memview)) __PYX_ERR(0, 2073, __pyx_L1_error)
    __PYX_XCLEAR_MEMVIEW(&__pyx_v_prtls_view, 1);
    __pyx_v_prtls_view = __pyx_t_8;
    __pyx_t_8.memview = NULL;
    __pyx_t_8.data = NULL;
 2074: 
+2075:         check_ndim(prtls)
    __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_check_ndim); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2075, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_1 = NULL;
    __pyx_t_7 = 0;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_6))) {
      __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_6);
      if (likely(__pyx_t_1)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
        __Pyx_INCREF(__pyx_t_1);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_6, function);
        __pyx_t_7 = 1;
      }
    }
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_1, __pyx_v_prtls};
      __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_6, __pyx_callargs+1-__pyx_t_7, 1+__pyx_t_7);
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2075, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    }
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 2076: 
+2077:         gen = mus_any.from_ptr(cclm.mus_make_polywave(frequency, &prtls_view[0], len(prtls), kind))
    __pyx_t_12 = 0;
    __pyx_t_7 = -1;
    if (__pyx_t_12 < 0) {
      __pyx_t_12 += __pyx_v_prtls_view.shape[0];
      if (unlikely(__pyx_t_12 < 0)) __pyx_t_7 = 0;
    } else if (unlikely(__pyx_t_12 >= __pyx_v_prtls_view.shape[0])) __pyx_t_7 = 0;
    if (unlikely(__pyx_t_7 != -1)) {
      __Pyx_RaiseBufferIndexError(__pyx_t_7);
      __PYX_ERR(0, 2077, __pyx_L1_error)
    }
    __pyx_t_13 = PyObject_Length(__pyx_v_prtls); if (unlikely(__pyx_t_13 == ((Py_ssize_t)-1))) __PYX_ERR(0, 2077, __pyx_L1_error)
    __pyx_t_7 = __Pyx_PyInt_As_int(__pyx_v_kind); if (unlikely((__pyx_t_7 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 2077, __pyx_L1_error)
    __pyx_t_2 = ((PyObject *)__pyx_vtabptr_8pysndlib_3clm_mus_any->from_ptr(mus_make_polywave(__pyx_v_frequency, (&(*((double *) ( /* dim=0 */ (__pyx_v_prtls_view.data + __pyx_t_12 * __pyx_v_prtls_view.strides[0]) )))), __pyx_t_13, __pyx_t_7), NULL)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2077, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_v_gen = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)__pyx_t_2);
    __pyx_t_2 = 0;
+2078:         gen.cache_extend([prtls, xcoeffs, ycoeffs])
    __pyx_t_2 = PyList_New(3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2078, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_INCREF(__pyx_v_prtls);
    __Pyx_GIVEREF(__pyx_v_prtls);
    PyList_SET_ITEM(__pyx_t_2, 0, __pyx_v_prtls);
    __Pyx_INCREF(__pyx_v_xcoeffs);
    __Pyx_GIVEREF(__pyx_v_xcoeffs);
    PyList_SET_ITEM(__pyx_t_2, 1, __pyx_v_xcoeffs);
    __Pyx_INCREF(__pyx_v_ycoeffs);
    __Pyx_GIVEREF(__pyx_v_ycoeffs);
    PyList_SET_ITEM(__pyx_t_2, 2, __pyx_v_ycoeffs);
    __pyx_t_6 = ((struct __pyx_vtabstruct_8pysndlib_3clm_mus_any *)__pyx_v_gen->__pyx_vtab)->cache_extend(__pyx_v_gen, __pyx_t_2, 0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2078, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+2079:         return gen
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __Pyx_INCREF((PyObject *)__pyx_v_gen);
    __pyx_r = __pyx_v_gen;
    goto __pyx_L0;
  }
 2080: 
 2081: 
+2082: cpdef cython.double polywave(gen: mus_any, fm: Optional[float]=None):
static PyObject *__pyx_pw_8pysndlib_3clm_191polywave(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static double __pyx_f_8pysndlib_3clm_polywave(struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen, CYTHON_UNUSED int __pyx_skip_dispatch, struct __pyx_opt_args_8pysndlib_3clm_polywave *__pyx_optional_args) {
  PyObject *__pyx_v_fm = ((PyObject *)Py_None);
  double __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("polywave", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_fm = __pyx_optional_args->fm;
    }
  }
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("pysndlib.clm.polywave", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_191polywave(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_190polywave, "\n    next sample of polywave waveshaper.\n    \n    :param gen: polywave gen\n    :param fm: fm input\n    :rtype: float\n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_191polywave = {"polywave", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_191polywave, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_190polywave};
static PyObject *__pyx_pw_8pysndlib_3clm_191polywave(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen = 0;
  PyObject *__pyx_v_fm = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("polywave (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_gen,&__pyx_n_s_fm,0};
    PyObject* values[2] = {0,0};
    values[1] = ((PyObject *)Py_None);
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_gen)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 2082, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_fm);
          if (value) { values[1] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 2082, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "polywave") < 0)) __PYX_ERR(0, 2082, __pyx_L3_error)
      }
    } else {
      switch (__pyx_nargs) {
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_gen = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)values[0]);
    __pyx_v_fm = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("polywave", 0, 1, 2, __pyx_nargs); __PYX_ERR(0, 2082, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.polywave", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_gen), __pyx_ptype_8pysndlib_3clm_mus_any, 0, "gen", 0))) __PYX_ERR(0, 2082, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pysndlib_3clm_190polywave(__pyx_self, __pyx_v_gen, __pyx_v_fm);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_190polywave(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen, PyObject *__pyx_v_fm) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("polywave", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2.__pyx_n = 1;
  __pyx_t_2.fm = __pyx_v_fm;
  __pyx_t_1 = __pyx_f_8pysndlib_3clm_polywave(__pyx_v_gen, 0, &__pyx_t_2); if (unlikely(__pyx_t_1 == ((double)-1) && PyErr_Occurred())) __PYX_ERR(0, 2082, __pyx_L1_error)
  __pyx_t_3 = PyFloat_FromDouble(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2082, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_r = __pyx_t_3;
  __pyx_t_3 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("pysndlib.clm.polywave", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_37 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 2082, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  if (PyDict_SetItem(__pyx_t_37, __pyx_n_s_gen, __pyx_n_s_mus_any) < 0) __PYX_ERR(0, 2082, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_37, __pyx_n_s_fm, __pyx_kp_s_Optional_float) < 0) __PYX_ERR(0, 2082, __pyx_L1_error)
  __pyx_t_41 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_191polywave, 0, __pyx_n_s_polywave, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__268)); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 2082, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_41, __pyx_tuple__258);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_41, __pyx_t_37);
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_polywave, __pyx_t_41) < 0) __PYX_ERR(0, 2082, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
/* … */
  __pyx_codeobj__268 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__256, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_polywave, 2082, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__268)) __PYX_ERR(0, 2082, __pyx_L1_error)
/* … */
struct __pyx_opt_args_8pysndlib_3clm_polywave {
  int __pyx_n;
  PyObject *fm;
};
 2083:     """
 2084:     next sample of polywave waveshaper.
 2085:     
 2086:     :param gen: polywave gen
 2087:     :param fm: fm input
 2088:     :rtype: float
 2089:     """
+2090:     if fm:
  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_fm); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 2090, __pyx_L1_error)
  if (__pyx_t_1) {
/* … */
  }
+2091:         return cclm.mus_polywave(gen._ptr, fm)
    __pyx_t_2 = __pyx_PyFloat_AsDouble(__pyx_v_fm); if (unlikely((__pyx_t_2 == ((mus_float_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 2091, __pyx_L1_error)
    __pyx_r = mus_polywave(__pyx_v_gen->_ptr, __pyx_t_2);
    goto __pyx_L0;
 2092:     else:
+2093:         return cclm.mus_polywave_unmodulated(gen._ptr)
  /*else*/ {
    __pyx_r = mus_polywave_unmodulated(__pyx_v_gen->_ptr);
    goto __pyx_L0;
  }
 2094: 
+2095: cpdef bint is_polywave(gen: mus_any):
static PyObject *__pyx_pw_8pysndlib_3clm_193is_polywave(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static int __pyx_f_8pysndlib_3clm_is_polywave(struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen, CYTHON_UNUSED int __pyx_skip_dispatch) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_polywave", 0);
/* … */
  /* function exit code */
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_193is_polywave(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_192is_polywave, "\n    returns True if gen is a polywave.\n    \n    :param gen: gen\n    :rtype: bool\n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_193is_polywave = {"is_polywave", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_193is_polywave, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_192is_polywave};
static PyObject *__pyx_pw_8pysndlib_3clm_193is_polywave(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_polywave (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_gen,0};
    PyObject* values[1] = {0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_gen)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 2095, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "is_polywave") < 0)) __PYX_ERR(0, 2095, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
    }
    __pyx_v_gen = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)values[0]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("is_polywave", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 2095, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.is_polywave", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_gen), __pyx_ptype_8pysndlib_3clm_mus_any, 0, "gen", 0))) __PYX_ERR(0, 2095, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pysndlib_3clm_192is_polywave(__pyx_self, __pyx_v_gen);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_192is_polywave(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_polywave", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_8pysndlib_3clm_is_polywave(__pyx_v_gen, 0); if (unlikely(__pyx_t_1 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 2095, __pyx_L1_error)
  __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2095, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pysndlib.clm.is_polywave", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_41 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 2095, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  if (PyDict_SetItem(__pyx_t_41, __pyx_n_s_gen, __pyx_n_s_mus_any) < 0) __PYX_ERR(0, 2095, __pyx_L1_error)
  __pyx_t_37 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_193is_polywave, 0, __pyx_n_s_is_polywave, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__269)); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 2095, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_37, __pyx_t_41);
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_is_polywave, __pyx_t_37) < 0) __PYX_ERR(0, 2095, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
/* … */
  __pyx_codeobj__269 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__46, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_is_polywave, 2095, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__269)) __PYX_ERR(0, 2095, __pyx_L1_error)
 2096:     """
 2097:     returns True if gen is a polywave.
 2098:     
 2099:     :param gen: gen
 2100:     :rtype: bool
 2101:     """
+2102:     return cclm.mus_is_polywave(gen._ptr)
  __pyx_r = mus_is_polywave(__pyx_v_gen->_ptr);
  goto __pyx_L0;
 2103: 
 2104: 
 2105: 
 2106: # ---------------- polyshape ---------------- #
 2107: 
+2108: cpdef mus_any make_polyshape(frequency: float,
static PyObject *__pyx_pw_8pysndlib_3clm_195make_polyshape(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_f_8pysndlib_3clm_make_polyshape(double __pyx_v_frequency, CYTHON_UNUSED int __pyx_skip_dispatch, struct __pyx_opt_args_8pysndlib_3clm_make_polyshape *__pyx_optional_args) {
  PyObject *__pyx_v_initial_phase = ((PyObject *)__pyx_float_0_0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __PYX_XCLEAR_MEMVIEW(&__pyx_t_10, 1);
  __Pyx_AddTraceback("pysndlib.clm.make_polyshape", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_data);
  __PYX_XCLEAR_MEMVIEW(&__pyx_v_data_view, 1);
  __Pyx_XDECREF((PyObject *)__pyx_v_gen);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_195make_polyshape(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_194make_polyshape, "\n    return a new polynomial-based waveshaping generator.\n    \n    :param frequency: frequency of gen \\in hz\n    :param initial_phase: initial phase of gen \\in radians\n    :param coeff: coefficients can be passed to polyshape\n    :param partials: a list of harmonic numbers and their associated amplitudes\n    :param kind: Chebyshev polynomial choice\n    :return: polyshape gen\n    :rtype: mus_any\n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_195make_polyshape = {"make_polyshape", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_195make_polyshape, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_194make_polyshape};
static PyObject *__pyx_pw_8pysndlib_3clm_195make_polyshape(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  double __pyx_v_frequency;
  PyObject *__pyx_v_initial_phase = 0;
  PyObject *__pyx_v_coeffs = 0;
  PyObject *__pyx_v_partials = 0;
  PyObject *__pyx_v_kind = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("make_polyshape (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_frequency,&__pyx_n_s_initial_phase,&__pyx_n_s_coeffs,&__pyx_n_s_partials,&__pyx_n_s_kind,0};
    PyObject* values[5] = {0,0,0,0,0};
    values[1] = ((PyObject *)__pyx_float_0_0);
/* … */
  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_194make_polyshape(CYTHON_UNUSED PyObject *__pyx_self, double __pyx_v_frequency, PyObject *__pyx_v_initial_phase, PyObject *__pyx_v_coeffs, PyObject *__pyx_v_partials, PyObject *__pyx_v_kind) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("make_polyshape", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2.__pyx_n = 4;
  __pyx_t_2.initial_phase = __pyx_v_initial_phase;
  __pyx_t_2.coeffs = __pyx_v_coeffs;
  __pyx_t_2.partials = __pyx_v_partials;
  __pyx_t_2.kind = __pyx_v_kind;
  __pyx_t_1 = ((PyObject *)__pyx_f_8pysndlib_3clm_make_polyshape(__pyx_v_frequency, 0, &__pyx_t_2)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2108, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pysndlib.clm.make_polyshape", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__270 = PyTuple_Pack(5, __pyx_n_s_frequency, __pyx_n_s_initial_phase, __pyx_n_s_coeffs, __pyx_n_s_partials, __pyx_n_s_kind); if (unlikely(!__pyx_tuple__270)) __PYX_ERR(0, 2108, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__270);
  __Pyx_GIVEREF(__pyx_tuple__270);
/* … */
  __pyx_t_40 = PyTuple_New(4); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 2108, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  __Pyx_INCREF(__pyx_float_0_0);
  __Pyx_GIVEREF(__pyx_float_0_0);
  PyTuple_SET_ITEM(__pyx_t_40, 0, __pyx_float_0_0);
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  PyTuple_SET_ITEM(__pyx_t_40, 1, Py_None);
  __Pyx_GIVEREF(__pyx_t_37);
  PyTuple_SET_ITEM(__pyx_t_40, 2, __pyx_t_37);
  __Pyx_GIVEREF(__pyx_t_41);
  PyTuple_SET_ITEM(__pyx_t_40, 3, __pyx_t_41);
  __pyx_t_37 = 0;
  __pyx_t_41 = 0;
  __pyx_t_41 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 2108, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  if (PyDict_SetItem(__pyx_t_41, __pyx_n_s_frequency, __pyx_n_s_float) < 0) __PYX_ERR(0, 2108, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_41, __pyx_n_s_initial_phase, __pyx_kp_s_Optional_float) < 0) __PYX_ERR(0, 2108, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_41, __pyx_n_s_kind, __pyx_kp_s_Optional_int) < 0) __PYX_ERR(0, 2108, __pyx_L1_error)
  __pyx_t_37 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_195make_polyshape, 0, __pyx_n_s_make_polyshape, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__271)); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 2108, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_37, __pyx_t_40);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_37, __pyx_t_41);
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_make_polyshape, __pyx_t_37) < 0) __PYX_ERR(0, 2108, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
  __pyx_codeobj__271 = (PyObject*)__Pyx_PyCode_New(5, 0, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__270, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_make_polyshape, 2108, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__271)) __PYX_ERR(0, 2108, __pyx_L1_error)
/* … */
struct __pyx_opt_args_8pysndlib_3clm_make_polyshape {
  int __pyx_n;
  PyObject *initial_phase;
  PyObject *coeffs;
  PyObject *partials;
  PyObject *kind;
};
 2109:                     initial_phase: Optional[float]=0.0,
+2110:                     coeffs=None,
  PyObject *__pyx_v_coeffs = ((PyObject *)Py_None);
  PyObject *__pyx_v_partials = __pyx_k__26;
  PyObject *__pyx_v_kind = __pyx_k__27;
  PyObject *__pyx_v_data = NULL;
  __Pyx_memviewslice __pyx_v_data_view = { 0, 0, { 0 }, { 0 }, { 0 } };
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen = NULL;
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("make_polyshape", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_initial_phase = __pyx_optional_args->initial_phase;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_coeffs = __pyx_optional_args->coeffs;
        if (__pyx_optional_args->__pyx_n > 2) {
          __pyx_v_partials = __pyx_optional_args->partials;
          if (__pyx_optional_args->__pyx_n > 3) {
            __pyx_v_kind = __pyx_optional_args->kind;
          }
        }
      }
    }
  }
/* … */
    values[2] = ((PyObject *)Py_None);
    values[3] = __pyx_k__26;
    values[4] = __pyx_k__27;
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  5: values[4] = __Pyx_Arg_FASTCALL(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_frequency)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 2108, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_initial_phase);
          if (value) { values[1] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 2108, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_coeffs);
          if (value) { values[2] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 2108, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_partials);
          if (value) { values[3] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 2108, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_kind);
          if (value) { values[4] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 2108, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "make_polyshape") < 0)) __PYX_ERR(0, 2108, __pyx_L3_error)
      }
    } else {
      switch (__pyx_nargs) {
        case  5: values[4] = __Pyx_Arg_FASTCALL(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_frequency = __pyx_PyFloat_AsDouble(values[0]); if (unlikely((__pyx_v_frequency == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 2108, __pyx_L3_error)
    __pyx_v_initial_phase = values[1];
    __pyx_v_coeffs = values[2];
    __pyx_v_partials = values[3];
    __pyx_v_kind = values[4];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("make_polyshape", 0, 1, 5, __pyx_nargs); __PYX_ERR(0, 2108, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.make_polyshape", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pysndlib_3clm_194make_polyshape(__pyx_self, __pyx_v_frequency, __pyx_v_initial_phase, __pyx_v_coeffs, __pyx_v_partials, __pyx_v_kind);
+2111:                     partials= [1.,1.],
  __pyx_t_37 = PyList_New(2); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 2111, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  __Pyx_INCREF(__pyx_float_1_);
  __Pyx_GIVEREF(__pyx_float_1_);
  PyList_SET_ITEM(__pyx_t_37, 0, __pyx_float_1_);
  __Pyx_INCREF(__pyx_float_1_);
  __Pyx_GIVEREF(__pyx_float_1_);
  PyList_SET_ITEM(__pyx_t_37, 1, __pyx_float_1_);
  __pyx_k__26 = __pyx_t_37;
  __Pyx_GIVEREF(__pyx_t_37);
  __pyx_t_37 = 0;
/* … */
  __pyx_t_37 = PyList_New(2); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 2111, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  __Pyx_INCREF(__pyx_float_1_);
  __Pyx_GIVEREF(__pyx_float_1_);
  PyList_SET_ITEM(__pyx_t_37, 0, __pyx_float_1_);
  __Pyx_INCREF(__pyx_float_1_);
  __Pyx_GIVEREF(__pyx_float_1_);
  PyList_SET_ITEM(__pyx_t_37, 1, __pyx_float_1_);
+2112:                     kind: Optional[int]=Polynomial.FIRST_KIND):
  __pyx_t_37 = __Pyx_Enum_Polynomial_to_py(__pyx_e_8pysndlib_3clm_FIRST_KIND); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 2112, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  __pyx_k__27 = __pyx_t_37;
  __Pyx_GIVEREF(__pyx_t_37);
  __pyx_t_37 = 0;
/* … */
  __pyx_t_41 = __Pyx_Enum_Polynomial_to_py(__pyx_e_8pysndlib_3clm_FIRST_KIND); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 2112, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
 2113:                     
 2114:     """
 2115:     return a new polynomial-based waveshaping generator.
 2116:     
 2117:     :param frequency: frequency of gen \in hz
 2118:     :param initial_phase: initial phase of gen \in radians
 2119:     :param coeff: coefficients can be passed to polyshape
 2120:     :param partials: a list of harmonic numbers and their associated amplitudes
 2121:     :param kind: Chebyshev polynomial choice
 2122:     :return: polyshape gen
 2123:     :rtype: mus_any
 2124:     """
 2125: 
+2126:     check_range('frequency', frequency, 0.0, get_srate() / 2)
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_check_range); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2126, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = PyFloat_FromDouble(__pyx_v_frequency); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2126, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = __pyx_f_8pysndlib_3clm_get_srate(0); if (unlikely(__pyx_t_4 == ((double)-1) && PyErr_Occurred())) __PYX_ERR(0, 2126, __pyx_L1_error)
  __pyx_t_5 = PyFloat_FromDouble((__pyx_t_4 / 2.0)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2126, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_6 = NULL;
  __pyx_t_7 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_6)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_6);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
      __pyx_t_7 = 1;
    }
  }
  {
    PyObject *__pyx_callargs[5] = {__pyx_t_6, __pyx_n_s_frequency, __pyx_t_3, __pyx_float_0_0, __pyx_t_5};
    __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_7, 4+__pyx_t_7);
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2126, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 2127: 
+2128:     if coeffs:
  __pyx_t_8 = __Pyx_PyObject_IsTrue(__pyx_v_coeffs); if (unlikely((__pyx_t_8 < 0))) __PYX_ERR(0, 2128, __pyx_L1_error)
  if (__pyx_t_8) {
/* … */
    goto __pyx_L3;
  }
+2129:         if isinstance(coeffs, list):
    __pyx_t_8 = PyList_Check(__pyx_v_coeffs); 
    if (__pyx_t_8) {
/* … */
      goto __pyx_L4;
    }
+2130:             data = np.array(coeffs, dtype=np.double)
      __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2130, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_array); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2130, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2130, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_INCREF(__pyx_v_coeffs);
      __Pyx_GIVEREF(__pyx_v_coeffs);
      PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_coeffs);
      __pyx_t_5 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2130, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2130, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_double); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2130, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_dtype, __pyx_t_6) < 0) __PYX_ERR(0, 2130, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_1, __pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2130, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __pyx_v_data = __pyx_t_6;
      __pyx_t_6 = 0;
 2131:         else:
+2132:             data = coeffs
    /*else*/ {
      __Pyx_INCREF(__pyx_v_coeffs);
      __pyx_v_data = __pyx_v_coeffs;
    }
    __pyx_L4:;
 2133: 
 2134:     else:
+2135:         data = partials2polynomial(partials, kind)
  /*else*/ {
    __pyx_t_9.__pyx_n = 1;
    __pyx_t_9.kind = __pyx_v_kind;
    __pyx_t_6 = ((PyObject *)__pyx_f_8pysndlib_3clm_partials2polynomial(__pyx_v_partials, 0, &__pyx_t_9)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2135, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_v_data = __pyx_t_6;
    __pyx_t_6 = 0;
  }
  __pyx_L3:;
 2136: 
+2137:     check_ndim(data)
  __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_check_ndim); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2137, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_1 = NULL;
  __pyx_t_7 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) {
    __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_5);
    if (likely(__pyx_t_1)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
      __Pyx_INCREF(__pyx_t_1);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_5, function);
      __pyx_t_7 = 1;
    }
  }
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_1, __pyx_v_data};
    __pyx_t_6 = __Pyx_PyObject_FastCall(__pyx_t_5, __pyx_callargs+1-__pyx_t_7, 1+__pyx_t_7);
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2137, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  }
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
 2138: 
+2139:     cdef double [:] data_view = data
  __pyx_t_10 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_data, PyBUF_WRITABLE); if (unlikely(!__pyx_t_10.memview)) __PYX_ERR(0, 2139, __pyx_L1_error)
  __pyx_v_data_view = __pyx_t_10;
  __pyx_t_10.memview = NULL;
  __pyx_t_10.data = NULL;
 2140: 
+2141:     gen = mus_any.from_ptr(cclm.mus_make_polyshape(frequency, initial_phase, &data_view[0], len(data), kind))
  __pyx_t_11 = __pyx_PyFloat_AsDouble(__pyx_v_initial_phase); if (unlikely((__pyx_t_11 == ((mus_float_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 2141, __pyx_L1_error)
  __pyx_t_12 = 0;
  __pyx_t_7 = -1;
  if (__pyx_t_12 < 0) {
    __pyx_t_12 += __pyx_v_data_view.shape[0];
    if (unlikely(__pyx_t_12 < 0)) __pyx_t_7 = 0;
  } else if (unlikely(__pyx_t_12 >= __pyx_v_data_view.shape[0])) __pyx_t_7 = 0;
  if (unlikely(__pyx_t_7 != -1)) {
    __Pyx_RaiseBufferIndexError(__pyx_t_7);
    __PYX_ERR(0, 2141, __pyx_L1_error)
  }
  __pyx_t_13 = PyObject_Length(__pyx_v_data); if (unlikely(__pyx_t_13 == ((Py_ssize_t)-1))) __PYX_ERR(0, 2141, __pyx_L1_error)
  __pyx_t_7 = __Pyx_PyInt_As_int(__pyx_v_kind); if (unlikely((__pyx_t_7 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 2141, __pyx_L1_error)
  __pyx_t_6 = ((PyObject *)__pyx_vtabptr_8pysndlib_3clm_mus_any->from_ptr(mus_make_polyshape(__pyx_v_frequency, __pyx_t_11, (&(*((double *) ( /* dim=0 */ (__pyx_v_data_view.data + __pyx_t_12 * __pyx_v_data_view.strides[0]) )))), __pyx_t_13, __pyx_t_7), NULL)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2141, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_v_gen = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)__pyx_t_6);
  __pyx_t_6 = 0;
+2142:     gen.cache_append(data)
  __pyx_t_6 = ((struct __pyx_vtabstruct_8pysndlib_3clm_mus_any *)__pyx_v_gen->__pyx_vtab)->cache_append(__pyx_v_gen, __pyx_v_data, 0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2142, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+2143:     return gen
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __Pyx_INCREF((PyObject *)__pyx_v_gen);
  __pyx_r = __pyx_v_gen;
  goto __pyx_L0;
 2144: 
+2145: cpdef cython.double polyshape(gen: mus_any, index: Optional[float]=1.0, fm: Optional[float]=None):
static PyObject *__pyx_pw_8pysndlib_3clm_197polyshape(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static double __pyx_f_8pysndlib_3clm_polyshape(struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen, CYTHON_UNUSED int __pyx_skip_dispatch, struct __pyx_opt_args_8pysndlib_3clm_polyshape *__pyx_optional_args) {
  PyObject *__pyx_v_index = ((PyObject *)__pyx_float_1_0);
  PyObject *__pyx_v_fm = ((PyObject *)Py_None);
  double __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("polyshape", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_index = __pyx_optional_args->index;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_fm = __pyx_optional_args->fm;
      }
    }
  }
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("pysndlib.clm.polyshape", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_197polyshape(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_196polyshape, "\n    next sample of polynomial-based waveshaper.\n    \n    :param gen: polyshape gen\n    :param index: fm index\n    :param fm: fm input\n    :rtype: float\n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_197polyshape = {"polyshape", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_197polyshape, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_196polyshape};
static PyObject *__pyx_pw_8pysndlib_3clm_197polyshape(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen = 0;
  PyObject *__pyx_v_index = 0;
  PyObject *__pyx_v_fm = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("polyshape (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_gen,&__pyx_n_s_index,&__pyx_n_s_fm,0};
    PyObject* values[3] = {0,0,0};
    values[1] = ((PyObject *)__pyx_float_1_0);
    values[2] = ((PyObject *)Py_None);
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_gen)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 2145, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_index);
          if (value) { values[1] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 2145, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_fm);
          if (value) { values[2] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 2145, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "polyshape") < 0)) __PYX_ERR(0, 2145, __pyx_L3_error)
      }
    } else {
      switch (__pyx_nargs) {
        case  3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_gen = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)values[0]);
    __pyx_v_index = values[1];
    __pyx_v_fm = values[2];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("polyshape", 0, 1, 3, __pyx_nargs); __PYX_ERR(0, 2145, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.polyshape", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_gen), __pyx_ptype_8pysndlib_3clm_mus_any, 0, "gen", 0))) __PYX_ERR(0, 2145, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pysndlib_3clm_196polyshape(__pyx_self, __pyx_v_gen, __pyx_v_index, __pyx_v_fm);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_196polyshape(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen, PyObject *__pyx_v_index, PyObject *__pyx_v_fm) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("polyshape", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2.__pyx_n = 2;
  __pyx_t_2.index = __pyx_v_index;
  __pyx_t_2.fm = __pyx_v_fm;
  __pyx_t_1 = __pyx_f_8pysndlib_3clm_polyshape(__pyx_v_gen, 0, &__pyx_t_2); if (unlikely(__pyx_t_1 == ((double)-1) && PyErr_Occurred())) __PYX_ERR(0, 2145, __pyx_L1_error)
  __pyx_t_3 = PyFloat_FromDouble(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2145, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_r = __pyx_t_3;
  __pyx_t_3 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("pysndlib.clm.polyshape", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__272 = PyTuple_Pack(3, __pyx_n_s_gen, __pyx_n_s_index, __pyx_n_s_fm); if (unlikely(!__pyx_tuple__272)) __PYX_ERR(0, 2145, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__272);
  __Pyx_GIVEREF(__pyx_tuple__272);
  __pyx_codeobj__273 = (PyObject*)__Pyx_PyCode_New(3, 0, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__272, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_polyshape, 2145, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__273)) __PYX_ERR(0, 2145, __pyx_L1_error)
/* … */
  __pyx_t_37 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 2145, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  if (PyDict_SetItem(__pyx_t_37, __pyx_n_s_gen, __pyx_n_s_mus_any) < 0) __PYX_ERR(0, 2145, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_37, __pyx_n_s_index, __pyx_kp_s_Optional_float) < 0) __PYX_ERR(0, 2145, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_37, __pyx_n_s_fm, __pyx_kp_s_Optional_float) < 0) __PYX_ERR(0, 2145, __pyx_L1_error)
  __pyx_t_41 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_197polyshape, 0, __pyx_n_s_polyshape, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__273)); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 2145, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_41, __pyx_tuple__274);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_41, __pyx_t_37);
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_polyshape, __pyx_t_41) < 0) __PYX_ERR(0, 2145, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
  __pyx_tuple__274 = PyTuple_Pack(2, __pyx_float_1_0, Py_None); if (unlikely(!__pyx_tuple__274)) __PYX_ERR(0, 2145, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__274);
  __Pyx_GIVEREF(__pyx_tuple__274);
/* … */
struct __pyx_opt_args_8pysndlib_3clm_polyshape {
  int __pyx_n;
  PyObject *index;
  PyObject *fm;
};
 2146:     """
 2147:     next sample of polynomial-based waveshaper.
 2148:     
 2149:     :param gen: polyshape gen
 2150:     :param index: fm index
 2151:     :param fm: fm input
 2152:     :rtype: float
 2153:     """
+2154:     if fm:
  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_fm); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 2154, __pyx_L1_error)
  if (__pyx_t_1) {
/* … */
  }
+2155:         return cclm.mus_polyshape(gen._ptr, index, fm)
    __pyx_t_2 = __pyx_PyFloat_AsDouble(__pyx_v_index); if (unlikely((__pyx_t_2 == ((mus_float_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 2155, __pyx_L1_error)
    __pyx_t_3 = __pyx_PyFloat_AsDouble(__pyx_v_fm); if (unlikely((__pyx_t_3 == ((mus_float_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 2155, __pyx_L1_error)
    __pyx_r = mus_polyshape(__pyx_v_gen->_ptr, __pyx_t_2, __pyx_t_3);
    goto __pyx_L0;
 2156:     else:
+2157:         return cclm.mus_polyshape_unmodulated(gen._ptr, index)
  /*else*/ {
    __pyx_t_3 = __pyx_PyFloat_AsDouble(__pyx_v_index); if (unlikely((__pyx_t_3 == ((mus_float_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 2157, __pyx_L1_error)
    __pyx_r = mus_polyshape_unmodulated(__pyx_v_gen->_ptr, __pyx_t_3);
    goto __pyx_L0;
  }
 2158: 
+2159: cpdef bint is_polyshape(gen: mus_any):
static PyObject *__pyx_pw_8pysndlib_3clm_199is_polyshape(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static int __pyx_f_8pysndlib_3clm_is_polyshape(struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen, CYTHON_UNUSED int __pyx_skip_dispatch) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_polyshape", 0);
/* … */
  /* function exit code */
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_199is_polyshape(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_198is_polyshape, "\n    returns True if gen is a polyshape.\n    \n    :param gen: gen\n    :rtype: bool\n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_199is_polyshape = {"is_polyshape", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_199is_polyshape, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_198is_polyshape};
static PyObject *__pyx_pw_8pysndlib_3clm_199is_polyshape(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_polyshape (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_gen,0};
    PyObject* values[1] = {0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_gen)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 2159, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "is_polyshape") < 0)) __PYX_ERR(0, 2159, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
    }
    __pyx_v_gen = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)values[0]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("is_polyshape", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 2159, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.is_polyshape", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_gen), __pyx_ptype_8pysndlib_3clm_mus_any, 0, "gen", 0))) __PYX_ERR(0, 2159, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pysndlib_3clm_198is_polyshape(__pyx_self, __pyx_v_gen);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_198is_polyshape(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_polyshape", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_8pysndlib_3clm_is_polyshape(__pyx_v_gen, 0); if (unlikely(__pyx_t_1 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 2159, __pyx_L1_error)
  __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2159, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pysndlib.clm.is_polyshape", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_41 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 2159, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  if (PyDict_SetItem(__pyx_t_41, __pyx_n_s_gen, __pyx_n_s_mus_any) < 0) __PYX_ERR(0, 2159, __pyx_L1_error)
  __pyx_t_37 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_199is_polyshape, 0, __pyx_n_s_is_polyshape, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__275)); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 2159, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_37, __pyx_t_41);
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_is_polyshape, __pyx_t_37) < 0) __PYX_ERR(0, 2159, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
/* … */
  __pyx_codeobj__275 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__46, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_is_polyshape, 2159, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__275)) __PYX_ERR(0, 2159, __pyx_L1_error)
 2160:     """
 2161:     returns True if gen is a polyshape.
 2162:     
 2163:     :param gen: gen
 2164:     :rtype: bool
 2165:     """
+2166:     return cclm.mus_is_polyshape(gen._ptr)
  __pyx_r = mus_is_polyshape(__pyx_v_gen->_ptr);
  goto __pyx_L0;
 2167: 
 2168: 
 2169: # ---------------- triangle-wave ---------------- #    
+2170: cpdef mus_any make_triangle_wave(frequency: float, amplitude: Optional[float]=1.0, phase: Optional[float]=0.0):
static PyObject *__pyx_pw_8pysndlib_3clm_201make_triangle_wave(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_f_8pysndlib_3clm_make_triangle_wave(double __pyx_v_frequency, CYTHON_UNUSED int __pyx_skip_dispatch, struct __pyx_opt_args_8pysndlib_3clm_make_triangle_wave *__pyx_optional_args) {
  PyObject *__pyx_v_amplitude = ((PyObject *)__pyx_float_1_0);
  PyObject *__pyx_v_phase = ((PyObject *)__pyx_float_0_0);
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("make_triangle_wave", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_amplitude = __pyx_optional_args->amplitude;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_phase = __pyx_optional_args->phase;
      }
    }
  }
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_AddTraceback("pysndlib.clm.make_triangle_wave", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_201make_triangle_wave(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_200make_triangle_wave, "\n    return a new triangle_wave generator.\n    \n    :param frequency: frequency of generator\n    :param amplitude: amplitude of generator\n    :param phase: initial phase\n    :return: triangle_wave gen\n    :rtype: mus_any\n    \n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_201make_triangle_wave = {"make_triangle_wave", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_201make_triangle_wave, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_200make_triangle_wave};
static PyObject *__pyx_pw_8pysndlib_3clm_201make_triangle_wave(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  double __pyx_v_frequency;
  PyObject *__pyx_v_amplitude = 0;
  PyObject *__pyx_v_phase = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("make_triangle_wave (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_frequency,&__pyx_n_s_amplitude,&__pyx_n_s_phase,0};
    PyObject* values[3] = {0,0,0};
    values[1] = ((PyObject *)__pyx_float_1_0);
    values[2] = ((PyObject *)__pyx_float_0_0);
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_frequency)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 2170, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_amplitude);
          if (value) { values[1] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 2170, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_phase);
          if (value) { values[2] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 2170, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "make_triangle_wave") < 0)) __PYX_ERR(0, 2170, __pyx_L3_error)
      }
    } else {
      switch (__pyx_nargs) {
        case  3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_frequency = __pyx_PyFloat_AsDouble(values[0]); if (unlikely((__pyx_v_frequency == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 2170, __pyx_L3_error)
    __pyx_v_amplitude = values[1];
    __pyx_v_phase = values[2];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("make_triangle_wave", 0, 1, 3, __pyx_nargs); __PYX_ERR(0, 2170, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.make_triangle_wave", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pysndlib_3clm_200make_triangle_wave(__pyx_self, __pyx_v_frequency, __pyx_v_amplitude, __pyx_v_phase);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_200make_triangle_wave(CYTHON_UNUSED PyObject *__pyx_self, double __pyx_v_frequency, PyObject *__pyx_v_amplitude, PyObject *__pyx_v_phase) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("make_triangle_wave", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2.__pyx_n = 2;
  __pyx_t_2.amplitude = __pyx_v_amplitude;
  __pyx_t_2.phase = __pyx_v_phase;
  __pyx_t_1 = ((PyObject *)__pyx_f_8pysndlib_3clm_make_triangle_wave(__pyx_v_frequency, 0, &__pyx_t_2)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2170, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pysndlib.clm.make_triangle_wave", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__276 = PyTuple_Pack(3, __pyx_n_s_frequency, __pyx_n_s_amplitude, __pyx_n_s_phase); if (unlikely(!__pyx_tuple__276)) __PYX_ERR(0, 2170, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__276);
  __Pyx_GIVEREF(__pyx_tuple__276);
  __pyx_codeobj__277 = (PyObject*)__Pyx_PyCode_New(3, 0, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__276, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_make_triangle_wave, 2170, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__277)) __PYX_ERR(0, 2170, __pyx_L1_error)
/* … */
  __pyx_t_37 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 2170, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  if (PyDict_SetItem(__pyx_t_37, __pyx_n_s_frequency, __pyx_n_s_float) < 0) __PYX_ERR(0, 2170, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_37, __pyx_n_s_amplitude, __pyx_kp_s_Optional_float) < 0) __PYX_ERR(0, 2170, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_37, __pyx_n_s_phase, __pyx_kp_s_Optional_float) < 0) __PYX_ERR(0, 2170, __pyx_L1_error)
  __pyx_t_41 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_201make_triangle_wave, 0, __pyx_n_s_make_triangle_wave, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__277)); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 2170, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_41, __pyx_tuple__278);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_41, __pyx_t_37);
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_make_triangle_wave, __pyx_t_41) < 0) __PYX_ERR(0, 2170, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
  __pyx_tuple__278 = PyTuple_Pack(2, __pyx_float_1_0, __pyx_float_0_0); if (unlikely(!__pyx_tuple__278)) __PYX_ERR(0, 2170, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__278);
  __Pyx_GIVEREF(__pyx_tuple__278);
/* … */
struct __pyx_opt_args_8pysndlib_3clm_make_triangle_wave {
  int __pyx_n;
  PyObject *amplitude;
  PyObject *phase;
};
 2171:     """
 2172:     return a new triangle_wave generator.
 2173:     
 2174:     :param frequency: frequency of generator
 2175:     :param amplitude: amplitude of generator
 2176:     :param phase: initial phase
 2177:     :return: triangle_wave gen
 2178:     :rtype: mus_any
 2179:     
 2180:     """
+2181:     check_range('frequency', frequency, 0.0, get_srate() / 2)
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_check_range); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2181, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = PyFloat_FromDouble(__pyx_v_frequency); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2181, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = __pyx_f_8pysndlib_3clm_get_srate(0); if (unlikely(__pyx_t_4 == ((double)-1) && PyErr_Occurred())) __PYX_ERR(0, 2181, __pyx_L1_error)
  __pyx_t_5 = PyFloat_FromDouble((__pyx_t_4 / 2.0)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2181, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_6 = NULL;
  __pyx_t_7 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_6)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_6);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
      __pyx_t_7 = 1;
    }
  }
  {
    PyObject *__pyx_callargs[5] = {__pyx_t_6, __pyx_n_s_frequency, __pyx_t_3, __pyx_float_0_0, __pyx_t_5};
    __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_7, 4+__pyx_t_7);
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2181, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 2182: 
+2183:     return mus_any.from_ptr(cclm.mus_make_triangle_wave(frequency, amplitude, phase))
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __pyx_t_8 = __pyx_PyFloat_AsDouble(__pyx_v_amplitude); if (unlikely((__pyx_t_8 == ((mus_float_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 2183, __pyx_L1_error)
  __pyx_t_9 = __pyx_PyFloat_AsDouble(__pyx_v_phase); if (unlikely((__pyx_t_9 == ((mus_float_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 2183, __pyx_L1_error)
  __pyx_t_1 = ((PyObject *)__pyx_vtabptr_8pysndlib_3clm_mus_any->from_ptr(mus_make_triangle_wave(__pyx_v_frequency, __pyx_t_8, __pyx_t_9), NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2183, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)__pyx_t_1);
  __pyx_t_1 = 0;
  goto __pyx_L0;
 2184: 
+2185: cpdef cython.double triangle_wave(gen: mus_any, fm: Optional[float]=None):
static PyObject *__pyx_pw_8pysndlib_3clm_203triangle_wave(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static double __pyx_f_8pysndlib_3clm_triangle_wave(struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen, CYTHON_UNUSED int __pyx_skip_dispatch, struct __pyx_opt_args_8pysndlib_3clm_triangle_wave *__pyx_optional_args) {
  PyObject *__pyx_v_fm = ((PyObject *)Py_None);
  double __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("triangle_wave", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_fm = __pyx_optional_args->fm;
    }
  }
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("pysndlib.clm.triangle_wave", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_203triangle_wave(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_202triangle_wave, "\n    next triangle wave sample from generator  .\n    \n    :param gen: polyshape gen\n    :param fm: fm input\n    :rtype: float\n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_203triangle_wave = {"triangle_wave", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_203triangle_wave, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_202triangle_wave};
static PyObject *__pyx_pw_8pysndlib_3clm_203triangle_wave(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen = 0;
  PyObject *__pyx_v_fm = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("triangle_wave (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_gen,&__pyx_n_s_fm,0};
    PyObject* values[2] = {0,0};
    values[1] = ((PyObject *)Py_None);
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_gen)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 2185, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_fm);
          if (value) { values[1] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 2185, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "triangle_wave") < 0)) __PYX_ERR(0, 2185, __pyx_L3_error)
      }
    } else {
      switch (__pyx_nargs) {
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_gen = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)values[0]);
    __pyx_v_fm = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("triangle_wave", 0, 1, 2, __pyx_nargs); __PYX_ERR(0, 2185, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.triangle_wave", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_gen), __pyx_ptype_8pysndlib_3clm_mus_any, 0, "gen", 0))) __PYX_ERR(0, 2185, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pysndlib_3clm_202triangle_wave(__pyx_self, __pyx_v_gen, __pyx_v_fm);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_202triangle_wave(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen, PyObject *__pyx_v_fm) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("triangle_wave", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2.__pyx_n = 1;
  __pyx_t_2.fm = __pyx_v_fm;
  __pyx_t_1 = __pyx_f_8pysndlib_3clm_triangle_wave(__pyx_v_gen, 0, &__pyx_t_2); if (unlikely(__pyx_t_1 == ((double)-1) && PyErr_Occurred())) __PYX_ERR(0, 2185, __pyx_L1_error)
  __pyx_t_3 = PyFloat_FromDouble(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2185, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_r = __pyx_t_3;
  __pyx_t_3 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("pysndlib.clm.triangle_wave", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_41 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 2185, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  if (PyDict_SetItem(__pyx_t_41, __pyx_n_s_gen, __pyx_n_s_mus_any) < 0) __PYX_ERR(0, 2185, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_41, __pyx_n_s_fm, __pyx_kp_s_Optional_float) < 0) __PYX_ERR(0, 2185, __pyx_L1_error)
  __pyx_t_37 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_203triangle_wave, 0, __pyx_n_s_triangle_wave, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__279)); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 2185, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_37, __pyx_tuple__258);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_37, __pyx_t_41);
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_triangle_wave, __pyx_t_37) < 0) __PYX_ERR(0, 2185, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
/* … */
  __pyx_codeobj__279 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__256, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_triangle_wave, 2185, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__279)) __PYX_ERR(0, 2185, __pyx_L1_error)
/* … */
struct __pyx_opt_args_8pysndlib_3clm_triangle_wave {
  int __pyx_n;
  PyObject *fm;
};
 2186:     """
 2187:     next triangle wave sample from generator  .
 2188:     
 2189:     :param gen: polyshape gen
 2190:     :param fm: fm input
 2191:     :rtype: float
 2192:     """
+2193:     if fm:
  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_fm); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 2193, __pyx_L1_error)
  if (__pyx_t_1) {
/* … */
  }
+2194:         return cclm.mus_triangle_wave(gen._ptr, fm)
    __pyx_t_2 = __pyx_PyFloat_AsDouble(__pyx_v_fm); if (unlikely((__pyx_t_2 == ((mus_float_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 2194, __pyx_L1_error)
    __pyx_r = mus_triangle_wave(__pyx_v_gen->_ptr, __pyx_t_2);
    goto __pyx_L0;
 2195:     else:
+2196:         return cclm.mus_triangle_wave_unmodulated(gen._ptr)
  /*else*/ {
    __pyx_r = mus_triangle_wave_unmodulated(__pyx_v_gen->_ptr);
    goto __pyx_L0;
  }
 2197: 
+2198: cpdef bint is_triangle_wave(gen: mus_any):
static PyObject *__pyx_pw_8pysndlib_3clm_205is_triangle_wave(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static int __pyx_f_8pysndlib_3clm_is_triangle_wave(struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen, CYTHON_UNUSED int __pyx_skip_dispatch) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_triangle_wave", 0);
/* … */
  /* function exit code */
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_205is_triangle_wave(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_204is_triangle_wave, "\n    returns True if gen is a triangle_wave.\n    \n    :param gen: gen\n    :rtype: bool\n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_205is_triangle_wave = {"is_triangle_wave", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_205is_triangle_wave, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_204is_triangle_wave};
static PyObject *__pyx_pw_8pysndlib_3clm_205is_triangle_wave(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_triangle_wave (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_gen,0};
    PyObject* values[1] = {0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_gen)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 2198, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "is_triangle_wave") < 0)) __PYX_ERR(0, 2198, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
    }
    __pyx_v_gen = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)values[0]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("is_triangle_wave", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 2198, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.is_triangle_wave", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_gen), __pyx_ptype_8pysndlib_3clm_mus_any, 0, "gen", 0))) __PYX_ERR(0, 2198, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pysndlib_3clm_204is_triangle_wave(__pyx_self, __pyx_v_gen);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_204is_triangle_wave(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_triangle_wave", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_8pysndlib_3clm_is_triangle_wave(__pyx_v_gen, 0); if (unlikely(__pyx_t_1 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 2198, __pyx_L1_error)
  __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2198, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pysndlib.clm.is_triangle_wave", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_37 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 2198, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  if (PyDict_SetItem(__pyx_t_37, __pyx_n_s_gen, __pyx_n_s_mus_any) < 0) __PYX_ERR(0, 2198, __pyx_L1_error)
  __pyx_t_41 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_205is_triangle_wave, 0, __pyx_n_s_is_triangle_wave, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__280)); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 2198, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_41, __pyx_t_37);
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_is_triangle_wave, __pyx_t_41) < 0) __PYX_ERR(0, 2198, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
/* … */
  __pyx_codeobj__280 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__46, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_is_triangle_wave, 2198, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__280)) __PYX_ERR(0, 2198, __pyx_L1_error)
 2199:     """
 2200:     returns True if gen is a triangle_wave.
 2201:     
 2202:     :param gen: gen
 2203:     :rtype: bool
 2204:     """
+2205:     return cclm.mus_is_triangle_wave(gen._ptr)
  __pyx_r = mus_is_triangle_wave(__pyx_v_gen->_ptr);
  goto __pyx_L0;
 2206: 
 2207: # ---------------- square-wave ---------------- #    
+2208: cpdef mus_any make_square_wave(frequency: float, amplitude: Optional[float]=1.0, phase: Optional[float]=0.0):
static PyObject *__pyx_pw_8pysndlib_3clm_207make_square_wave(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_f_8pysndlib_3clm_make_square_wave(double __pyx_v_frequency, CYTHON_UNUSED int __pyx_skip_dispatch, struct __pyx_opt_args_8pysndlib_3clm_make_square_wave *__pyx_optional_args) {
  PyObject *__pyx_v_amplitude = ((PyObject *)__pyx_float_1_0);
  PyObject *__pyx_v_phase = ((PyObject *)__pyx_float_0_0);
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("make_square_wave", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_amplitude = __pyx_optional_args->amplitude;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_phase = __pyx_optional_args->phase;
      }
    }
  }
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_AddTraceback("pysndlib.clm.make_square_wave", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_207make_square_wave(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_206make_square_wave, "\n    return a new square_wave generator.\n    \n    :param frequency: frequency of generator\n    :param amplitude: amplitude of generator\n    :param phase: initial phase\n    :return: square_wave gen\n    :rtype: mus_any\n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_207make_square_wave = {"make_square_wave", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_207make_square_wave, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_206make_square_wave};
static PyObject *__pyx_pw_8pysndlib_3clm_207make_square_wave(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  double __pyx_v_frequency;
  PyObject *__pyx_v_amplitude = 0;
  PyObject *__pyx_v_phase = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("make_square_wave (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_frequency,&__pyx_n_s_amplitude,&__pyx_n_s_phase,0};
    PyObject* values[3] = {0,0,0};
    values[1] = ((PyObject *)__pyx_float_1_0);
    values[2] = ((PyObject *)__pyx_float_0_0);
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_frequency)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 2208, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_amplitude);
          if (value) { values[1] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 2208, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_phase);
          if (value) { values[2] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 2208, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "make_square_wave") < 0)) __PYX_ERR(0, 2208, __pyx_L3_error)
      }
    } else {
      switch (__pyx_nargs) {
        case  3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_frequency = __pyx_PyFloat_AsDouble(values[0]); if (unlikely((__pyx_v_frequency == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 2208, __pyx_L3_error)
    __pyx_v_amplitude = values[1];
    __pyx_v_phase = values[2];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("make_square_wave", 0, 1, 3, __pyx_nargs); __PYX_ERR(0, 2208, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.make_square_wave", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pysndlib_3clm_206make_square_wave(__pyx_self, __pyx_v_frequency, __pyx_v_amplitude, __pyx_v_phase);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_206make_square_wave(CYTHON_UNUSED PyObject *__pyx_self, double __pyx_v_frequency, PyObject *__pyx_v_amplitude, PyObject *__pyx_v_phase) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("make_square_wave", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2.__pyx_n = 2;
  __pyx_t_2.amplitude = __pyx_v_amplitude;
  __pyx_t_2.phase = __pyx_v_phase;
  __pyx_t_1 = ((PyObject *)__pyx_f_8pysndlib_3clm_make_square_wave(__pyx_v_frequency, 0, &__pyx_t_2)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2208, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pysndlib.clm.make_square_wave", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_codeobj__281 = (PyObject*)__Pyx_PyCode_New(3, 0, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__276, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_make_square_wave, 2208, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__281)) __PYX_ERR(0, 2208, __pyx_L1_error)
/* … */
  __pyx_t_41 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 2208, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  if (PyDict_SetItem(__pyx_t_41, __pyx_n_s_frequency, __pyx_n_s_float) < 0) __PYX_ERR(0, 2208, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_41, __pyx_n_s_amplitude, __pyx_kp_s_Optional_float) < 0) __PYX_ERR(0, 2208, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_41, __pyx_n_s_phase, __pyx_kp_s_Optional_float) < 0) __PYX_ERR(0, 2208, __pyx_L1_error)
  __pyx_t_37 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_207make_square_wave, 0, __pyx_n_s_make_square_wave, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__281)); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 2208, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_37, __pyx_tuple__282);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_37, __pyx_t_41);
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_make_square_wave, __pyx_t_37) < 0) __PYX_ERR(0, 2208, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
  __pyx_tuple__282 = PyTuple_Pack(2, __pyx_float_1_0, __pyx_float_0_0); if (unlikely(!__pyx_tuple__282)) __PYX_ERR(0, 2208, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__282);
  __Pyx_GIVEREF(__pyx_tuple__282);
/* … */
struct __pyx_opt_args_8pysndlib_3clm_make_square_wave {
  int __pyx_n;
  PyObject *amplitude;
  PyObject *phase;
};
 2209:     """
 2210:     return a new square_wave generator.
 2211:     
 2212:     :param frequency: frequency of generator
 2213:     :param amplitude: amplitude of generator
 2214:     :param phase: initial phase
 2215:     :return: square_wave gen
 2216:     :rtype: mus_any
 2217:     """
+2218:     check_range('frequency', frequency, 0.0, get_srate() / 2)
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_check_range); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2218, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = PyFloat_FromDouble(__pyx_v_frequency); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2218, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = __pyx_f_8pysndlib_3clm_get_srate(0); if (unlikely(__pyx_t_4 == ((double)-1) && PyErr_Occurred())) __PYX_ERR(0, 2218, __pyx_L1_error)
  __pyx_t_5 = PyFloat_FromDouble((__pyx_t_4 / 2.0)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2218, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_6 = NULL;
  __pyx_t_7 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_6)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_6);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
      __pyx_t_7 = 1;
    }
  }
  {
    PyObject *__pyx_callargs[5] = {__pyx_t_6, __pyx_n_s_frequency, __pyx_t_3, __pyx_float_0_0, __pyx_t_5};
    __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_7, 4+__pyx_t_7);
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2218, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 2219: 
+2220:     return mus_any.from_ptr(cclm.mus_make_square_wave(frequency, amplitude, phase))
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __pyx_t_8 = __pyx_PyFloat_AsDouble(__pyx_v_amplitude); if (unlikely((__pyx_t_8 == ((mus_float_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 2220, __pyx_L1_error)
  __pyx_t_9 = __pyx_PyFloat_AsDouble(__pyx_v_phase); if (unlikely((__pyx_t_9 == ((mus_float_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 2220, __pyx_L1_error)
  __pyx_t_1 = ((PyObject *)__pyx_vtabptr_8pysndlib_3clm_mus_any->from_ptr(mus_make_square_wave(__pyx_v_frequency, __pyx_t_8, __pyx_t_9), NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2220, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)__pyx_t_1);
  __pyx_t_1 = 0;
  goto __pyx_L0;
 2221: 
+2222: cpdef cython.double square_wave(gen: mus_any, fm: cython.double=0.0):
static PyObject *__pyx_pw_8pysndlib_3clm_209square_wave(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static double __pyx_f_8pysndlib_3clm_square_wave(struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen, CYTHON_UNUSED int __pyx_skip_dispatch, struct __pyx_opt_args_8pysndlib_3clm_square_wave *__pyx_optional_args) {
  double __pyx_v_fm = ((double)0.0);
  double __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("square_wave", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_fm = __pyx_optional_args->fm;
    }
  }
/* … */
  /* function exit code */
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_209square_wave(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_208square_wave, "\n    next square wave sample from generator.\n    \n    :param gen: polyshape gen\n    :param fm: fm input\n    :rtype: float\n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_209square_wave = {"square_wave", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_209square_wave, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_208square_wave};
static PyObject *__pyx_pw_8pysndlib_3clm_209square_wave(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen = 0;
  double __pyx_v_fm;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("square_wave (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_gen,&__pyx_n_s_fm,0};
    PyObject* values[2] = {0,0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_gen)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 2222, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_fm);
          if (value) { values[1] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 2222, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "square_wave") < 0)) __PYX_ERR(0, 2222, __pyx_L3_error)
      }
    } else {
      switch (__pyx_nargs) {
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_gen = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)values[0]);
    if (values[1]) {
      __pyx_v_fm = __pyx_PyFloat_AsDouble(values[1]); if (unlikely((__pyx_v_fm == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 2222, __pyx_L3_error)
    } else {
      __pyx_v_fm = ((double)0.0);
    }
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("square_wave", 0, 1, 2, __pyx_nargs); __PYX_ERR(0, 2222, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.square_wave", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_gen), __pyx_ptype_8pysndlib_3clm_mus_any, 0, "gen", 0))) __PYX_ERR(0, 2222, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pysndlib_3clm_208square_wave(__pyx_self, __pyx_v_gen, __pyx_v_fm);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_208square_wave(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen, double __pyx_v_fm) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("square_wave", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2.__pyx_n = 1;
  __pyx_t_2.fm = __pyx_v_fm;
  __pyx_t_1 = __pyx_f_8pysndlib_3clm_square_wave(__pyx_v_gen, 0, &__pyx_t_2); if (unlikely(__pyx_t_1 == ((double)-1) && PyErr_Occurred())) __PYX_ERR(0, 2222, __pyx_L1_error)
  __pyx_t_3 = PyFloat_FromDouble(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2222, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_r = __pyx_t_3;
  __pyx_t_3 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("pysndlib.clm.square_wave", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_codeobj__283 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__256, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_square_wave, 2222, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__283)) __PYX_ERR(0, 2222, __pyx_L1_error)
/* … */
  __pyx_t_37 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 2222, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  if (PyDict_SetItem(__pyx_t_37, __pyx_n_s_gen, __pyx_n_s_mus_any) < 0) __PYX_ERR(0, 2222, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_37, __pyx_n_s_fm, __pyx_kp_s_cython_double) < 0) __PYX_ERR(0, 2222, __pyx_L1_error)
  __pyx_t_41 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_209square_wave, 0, __pyx_n_s_square_wave, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__283)); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 2222, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_41, __pyx_tuple__284);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_41, __pyx_t_37);
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_square_wave, __pyx_t_41) < 0) __PYX_ERR(0, 2222, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
  __pyx_tuple__284 = PyTuple_Pack(1, __pyx_float_0_0); if (unlikely(!__pyx_tuple__284)) __PYX_ERR(0, 2222, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__284);
  __Pyx_GIVEREF(__pyx_tuple__284);
/* … */
struct __pyx_opt_args_8pysndlib_3clm_square_wave {
  int __pyx_n;
  double fm;
};
 2223:     """
 2224:     next square wave sample from generator.
 2225:     
 2226:     :param gen: polyshape gen
 2227:     :param fm: fm input
 2228:     :rtype: float
 2229:     """
+2230:     return cclm.mus_square_wave(gen._ptr, fm)
  __pyx_r = mus_square_wave(__pyx_v_gen->_ptr, __pyx_v_fm);
  goto __pyx_L0;
 2231: 
+2232: cpdef bint is_square_wave(gen: mus_any):
static PyObject *__pyx_pw_8pysndlib_3clm_211is_square_wave(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static int __pyx_f_8pysndlib_3clm_is_square_wave(struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen, CYTHON_UNUSED int __pyx_skip_dispatch) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_square_wave", 0);
/* … */
  /* function exit code */
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_211is_square_wave(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_210is_square_wave, "\n    returns True if gen is a square_wave.\n    \n    :param gen: gen\n    :rtype: bool\n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_211is_square_wave = {"is_square_wave", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_211is_square_wave, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_210is_square_wave};
static PyObject *__pyx_pw_8pysndlib_3clm_211is_square_wave(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_square_wave (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_gen,0};
    PyObject* values[1] = {0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_gen)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 2232, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "is_square_wave") < 0)) __PYX_ERR(0, 2232, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
    }
    __pyx_v_gen = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)values[0]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("is_square_wave", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 2232, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.is_square_wave", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_gen), __pyx_ptype_8pysndlib_3clm_mus_any, 0, "gen", 0))) __PYX_ERR(0, 2232, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pysndlib_3clm_210is_square_wave(__pyx_self, __pyx_v_gen);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_210is_square_wave(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_square_wave", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_8pysndlib_3clm_is_square_wave(__pyx_v_gen, 0); if (unlikely(__pyx_t_1 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 2232, __pyx_L1_error)
  __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2232, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pysndlib.clm.is_square_wave", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_41 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 2232, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  if (PyDict_SetItem(__pyx_t_41, __pyx_n_s_gen, __pyx_n_s_mus_any) < 0) __PYX_ERR(0, 2232, __pyx_L1_error)
  __pyx_t_37 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_211is_square_wave, 0, __pyx_n_s_is_square_wave, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__285)); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 2232, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_37, __pyx_t_41);
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_is_square_wave, __pyx_t_37) < 0) __PYX_ERR(0, 2232, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
/* … */
  __pyx_codeobj__285 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__46, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_is_square_wave, 2232, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__285)) __PYX_ERR(0, 2232, __pyx_L1_error)
 2233:     """
 2234:     returns True if gen is a square_wave.
 2235:     
 2236:     :param gen: gen
 2237:     :rtype: bool
 2238:     """
+2239:     return cclm.mus_is_square_wave(gen._ptr)
  __pyx_r = mus_is_square_wave(__pyx_v_gen->_ptr);
  goto __pyx_L0;
 2240: 
 2241: # ---------------- sawtooth-wave ---------------- #    
+2242: cpdef mus_any make_sawtooth_wave(frequency: float, amplitude: Optional[float]=1.0, phase: Optional[float]=0.0):
static PyObject *__pyx_pw_8pysndlib_3clm_213make_sawtooth_wave(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_f_8pysndlib_3clm_make_sawtooth_wave(double __pyx_v_frequency, CYTHON_UNUSED int __pyx_skip_dispatch, struct __pyx_opt_args_8pysndlib_3clm_make_sawtooth_wave *__pyx_optional_args) {
  PyObject *__pyx_v_amplitude = ((PyObject *)__pyx_float_1_0);
  PyObject *__pyx_v_phase = ((PyObject *)__pyx_float_0_0);
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("make_sawtooth_wave", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_amplitude = __pyx_optional_args->amplitude;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_phase = __pyx_optional_args->phase;
      }
    }
  }
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_AddTraceback("pysndlib.clm.make_sawtooth_wave", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_213make_sawtooth_wave(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_212make_sawtooth_wave, "\n    return a new sawtooth_wave generator.\n    \n    :param frequency: frequency of generator\n    :param amplitude: amplitude of generator\n    :param phase: initial phase\n    :return: sawtooth_wave gen\n    :rtype: mus_any\n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_213make_sawtooth_wave = {"make_sawtooth_wave", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_213make_sawtooth_wave, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_212make_sawtooth_wave};
static PyObject *__pyx_pw_8pysndlib_3clm_213make_sawtooth_wave(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  double __pyx_v_frequency;
  PyObject *__pyx_v_amplitude = 0;
  PyObject *__pyx_v_phase = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("make_sawtooth_wave (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_frequency,&__pyx_n_s_amplitude,&__pyx_n_s_phase,0};
    PyObject* values[3] = {0,0,0};
    values[1] = ((PyObject *)__pyx_float_1_0);
    values[2] = ((PyObject *)__pyx_float_0_0);
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_frequency)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 2242, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_amplitude);
          if (value) { values[1] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 2242, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_phase);
          if (value) { values[2] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 2242, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "make_sawtooth_wave") < 0)) __PYX_ERR(0, 2242, __pyx_L3_error)
      }
    } else {
      switch (__pyx_nargs) {
        case  3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_frequency = __pyx_PyFloat_AsDouble(values[0]); if (unlikely((__pyx_v_frequency == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 2242, __pyx_L3_error)
    __pyx_v_amplitude = values[1];
    __pyx_v_phase = values[2];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("make_sawtooth_wave", 0, 1, 3, __pyx_nargs); __PYX_ERR(0, 2242, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.make_sawtooth_wave", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pysndlib_3clm_212make_sawtooth_wave(__pyx_self, __pyx_v_frequency, __pyx_v_amplitude, __pyx_v_phase);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_212make_sawtooth_wave(CYTHON_UNUSED PyObject *__pyx_self, double __pyx_v_frequency, PyObject *__pyx_v_amplitude, PyObject *__pyx_v_phase) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("make_sawtooth_wave", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2.__pyx_n = 2;
  __pyx_t_2.amplitude = __pyx_v_amplitude;
  __pyx_t_2.phase = __pyx_v_phase;
  __pyx_t_1 = ((PyObject *)__pyx_f_8pysndlib_3clm_make_sawtooth_wave(__pyx_v_frequency, 0, &__pyx_t_2)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2242, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pysndlib.clm.make_sawtooth_wave", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_codeobj__286 = (PyObject*)__Pyx_PyCode_New(3, 0, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__276, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_make_sawtooth_wave, 2242, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__286)) __PYX_ERR(0, 2242, __pyx_L1_error)
/* … */
  __pyx_t_37 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 2242, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  if (PyDict_SetItem(__pyx_t_37, __pyx_n_s_frequency, __pyx_n_s_float) < 0) __PYX_ERR(0, 2242, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_37, __pyx_n_s_amplitude, __pyx_kp_s_Optional_float) < 0) __PYX_ERR(0, 2242, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_37, __pyx_n_s_phase, __pyx_kp_s_Optional_float) < 0) __PYX_ERR(0, 2242, __pyx_L1_error)
  __pyx_t_41 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_213make_sawtooth_wave, 0, __pyx_n_s_make_sawtooth_wave, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__286)); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 2242, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_41, __pyx_tuple__287);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_41, __pyx_t_37);
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_make_sawtooth_wave, __pyx_t_41) < 0) __PYX_ERR(0, 2242, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
  __pyx_tuple__287 = PyTuple_Pack(2, __pyx_float_1_0, __pyx_float_0_0); if (unlikely(!__pyx_tuple__287)) __PYX_ERR(0, 2242, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__287);
  __Pyx_GIVEREF(__pyx_tuple__287);
/* … */
struct __pyx_opt_args_8pysndlib_3clm_make_sawtooth_wave {
  int __pyx_n;
  PyObject *amplitude;
  PyObject *phase;
};
 2243:     """
 2244:     return a new sawtooth_wave generator.
 2245:     
 2246:     :param frequency: frequency of generator
 2247:     :param amplitude: amplitude of generator
 2248:     :param phase: initial phase
 2249:     :return: sawtooth_wave gen
 2250:     :rtype: mus_any
 2251:     """
 2252: 
+2253:     check_range('frequency', frequency, 0.0, get_srate() / 2)
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_check_range); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2253, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = PyFloat_FromDouble(__pyx_v_frequency); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2253, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = __pyx_f_8pysndlib_3clm_get_srate(0); if (unlikely(__pyx_t_4 == ((double)-1) && PyErr_Occurred())) __PYX_ERR(0, 2253, __pyx_L1_error)
  __pyx_t_5 = PyFloat_FromDouble((__pyx_t_4 / 2.0)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2253, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_6 = NULL;
  __pyx_t_7 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_6)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_6);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
      __pyx_t_7 = 1;
    }
  }
  {
    PyObject *__pyx_callargs[5] = {__pyx_t_6, __pyx_n_s_frequency, __pyx_t_3, __pyx_float_0_0, __pyx_t_5};
    __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_7, 4+__pyx_t_7);
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2253, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 2254: 
+2255:     return mus_any.from_ptr(cclm.mus_make_sawtooth_wave(frequency, amplitude, phase))
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __pyx_t_8 = __pyx_PyFloat_AsDouble(__pyx_v_amplitude); if (unlikely((__pyx_t_8 == ((mus_float_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 2255, __pyx_L1_error)
  __pyx_t_9 = __pyx_PyFloat_AsDouble(__pyx_v_phase); if (unlikely((__pyx_t_9 == ((mus_float_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 2255, __pyx_L1_error)
  __pyx_t_1 = ((PyObject *)__pyx_vtabptr_8pysndlib_3clm_mus_any->from_ptr(mus_make_sawtooth_wave(__pyx_v_frequency, __pyx_t_8, __pyx_t_9), NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2255, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)__pyx_t_1);
  __pyx_t_1 = 0;
  goto __pyx_L0;
 2256: 
+2257: cpdef cython.double sawtooth_wave(gen: mus_any, fm: cython.double=0.0):
static PyObject *__pyx_pw_8pysndlib_3clm_215sawtooth_wave(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static double __pyx_f_8pysndlib_3clm_sawtooth_wave(struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen, CYTHON_UNUSED int __pyx_skip_dispatch, struct __pyx_opt_args_8pysndlib_3clm_sawtooth_wave *__pyx_optional_args) {
  double __pyx_v_fm = ((double)0.0);
  double __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("sawtooth_wave", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_fm = __pyx_optional_args->fm;
    }
  }
/* … */
  /* function exit code */
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_215sawtooth_wave(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_214sawtooth_wave, "\n    next sawtooth wave sample from generator.\n    \n    :param gen: polyshape gen\n    :param fm: fm input\n    :rtype: float\n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_215sawtooth_wave = {"sawtooth_wave", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_215sawtooth_wave, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_214sawtooth_wave};
static PyObject *__pyx_pw_8pysndlib_3clm_215sawtooth_wave(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen = 0;
  double __pyx_v_fm;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("sawtooth_wave (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_gen,&__pyx_n_s_fm,0};
    PyObject* values[2] = {0,0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_gen)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 2257, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_fm);
          if (value) { values[1] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 2257, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "sawtooth_wave") < 0)) __PYX_ERR(0, 2257, __pyx_L3_error)
      }
    } else {
      switch (__pyx_nargs) {
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_gen = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)values[0]);
    if (values[1]) {
      __pyx_v_fm = __pyx_PyFloat_AsDouble(values[1]); if (unlikely((__pyx_v_fm == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 2257, __pyx_L3_error)
    } else {
      __pyx_v_fm = ((double)0.0);
    }
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("sawtooth_wave", 0, 1, 2, __pyx_nargs); __PYX_ERR(0, 2257, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.sawtooth_wave", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_gen), __pyx_ptype_8pysndlib_3clm_mus_any, 0, "gen", 0))) __PYX_ERR(0, 2257, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pysndlib_3clm_214sawtooth_wave(__pyx_self, __pyx_v_gen, __pyx_v_fm);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_214sawtooth_wave(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen, double __pyx_v_fm) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("sawtooth_wave", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2.__pyx_n = 1;
  __pyx_t_2.fm = __pyx_v_fm;
  __pyx_t_1 = __pyx_f_8pysndlib_3clm_sawtooth_wave(__pyx_v_gen, 0, &__pyx_t_2); if (unlikely(__pyx_t_1 == ((double)-1) && PyErr_Occurred())) __PYX_ERR(0, 2257, __pyx_L1_error)
  __pyx_t_3 = PyFloat_FromDouble(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2257, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_r = __pyx_t_3;
  __pyx_t_3 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("pysndlib.clm.sawtooth_wave", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_codeobj__288 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__256, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_sawtooth_wave, 2257, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__288)) __PYX_ERR(0, 2257, __pyx_L1_error)
/* … */
  __pyx_t_41 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 2257, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  if (PyDict_SetItem(__pyx_t_41, __pyx_n_s_gen, __pyx_n_s_mus_any) < 0) __PYX_ERR(0, 2257, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_41, __pyx_n_s_fm, __pyx_kp_s_cython_double) < 0) __PYX_ERR(0, 2257, __pyx_L1_error)
  __pyx_t_37 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_215sawtooth_wave, 0, __pyx_n_s_sawtooth_wave, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__288)); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 2257, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_37, __pyx_tuple__289);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_37, __pyx_t_41);
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_sawtooth_wave, __pyx_t_37) < 0) __PYX_ERR(0, 2257, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
  __pyx_tuple__289 = PyTuple_Pack(1, __pyx_float_0_0); if (unlikely(!__pyx_tuple__289)) __PYX_ERR(0, 2257, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__289);
  __Pyx_GIVEREF(__pyx_tuple__289);
/* … */
struct __pyx_opt_args_8pysndlib_3clm_sawtooth_wave {
  int __pyx_n;
  double fm;
};
 2258:     """
 2259:     next sawtooth wave sample from generator.
 2260:     
 2261:     :param gen: polyshape gen
 2262:     :param fm: fm input
 2263:     :rtype: float
 2264:     """
+2265:     return cclm.mus_sawtooth_wave(gen._ptr, fm)
  __pyx_r = mus_sawtooth_wave(__pyx_v_gen->_ptr, __pyx_v_fm);
  goto __pyx_L0;
 2266: 
 2267: 
+2268: cpdef bint is_sawtooth_wave(gen: mus_any):
static PyObject *__pyx_pw_8pysndlib_3clm_217is_sawtooth_wave(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static int __pyx_f_8pysndlib_3clm_is_sawtooth_wave(struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen, CYTHON_UNUSED int __pyx_skip_dispatch) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_sawtooth_wave", 0);
/* … */
  /* function exit code */
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_217is_sawtooth_wave(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_216is_sawtooth_wave, "\n    returns True if gen is a sawtooth_wave.\n    \n    :param gen: gen\n    :rtype: bool\n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_217is_sawtooth_wave = {"is_sawtooth_wave", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_217is_sawtooth_wave, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_216is_sawtooth_wave};
static PyObject *__pyx_pw_8pysndlib_3clm_217is_sawtooth_wave(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_sawtooth_wave (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_gen,0};
    PyObject* values[1] = {0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_gen)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 2268, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "is_sawtooth_wave") < 0)) __PYX_ERR(0, 2268, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
    }
    __pyx_v_gen = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)values[0]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("is_sawtooth_wave", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 2268, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.is_sawtooth_wave", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_gen), __pyx_ptype_8pysndlib_3clm_mus_any, 0, "gen", 0))) __PYX_ERR(0, 2268, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pysndlib_3clm_216is_sawtooth_wave(__pyx_self, __pyx_v_gen);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_216is_sawtooth_wave(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_sawtooth_wave", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_8pysndlib_3clm_is_sawtooth_wave(__pyx_v_gen, 0); if (unlikely(__pyx_t_1 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 2268, __pyx_L1_error)
  __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2268, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pysndlib.clm.is_sawtooth_wave", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_37 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 2268, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  if (PyDict_SetItem(__pyx_t_37, __pyx_n_s_gen, __pyx_n_s_mus_any) < 0) __PYX_ERR(0, 2268, __pyx_L1_error)
  __pyx_t_41 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_217is_sawtooth_wave, 0, __pyx_n_s_is_sawtooth_wave, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__290)); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 2268, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_41, __pyx_t_37);
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_is_sawtooth_wave, __pyx_t_41) < 0) __PYX_ERR(0, 2268, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
/* … */
  __pyx_codeobj__290 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__46, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_is_sawtooth_wave, 2268, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__290)) __PYX_ERR(0, 2268, __pyx_L1_error)
 2269:     """
 2270:     returns True if gen is a sawtooth_wave.
 2271:     
 2272:     :param gen: gen
 2273:     :rtype: bool
 2274:     """
+2275:     return cclm.mus_is_sawtooth_wave(gen._ptr)
  __pyx_r = mus_is_sawtooth_wave(__pyx_v_gen->_ptr);
  goto __pyx_L0;
 2276: 
 2277: # ---------------- pulse-train ---------------- #        
+2278: cpdef mus_any make_pulse_train(frequency: float, amplitude: Optional[float]=1.0, phase: Optional[float]=0.0):
static PyObject *__pyx_pw_8pysndlib_3clm_219make_pulse_train(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_f_8pysndlib_3clm_make_pulse_train(double __pyx_v_frequency, CYTHON_UNUSED int __pyx_skip_dispatch, struct __pyx_opt_args_8pysndlib_3clm_make_pulse_train *__pyx_optional_args) {
  PyObject *__pyx_v_amplitude = ((PyObject *)__pyx_float_1_0);
  PyObject *__pyx_v_phase = ((PyObject *)__pyx_float_0_0);
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("make_pulse_train", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_amplitude = __pyx_optional_args->amplitude;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_phase = __pyx_optional_args->phase;
      }
    }
  }
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_AddTraceback("pysndlib.clm.make_pulse_train", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_219make_pulse_train(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_218make_pulse_train, "\n    return a new pulse_train generator. this produces a sequence of impulses.\n    \n    :param frequency: frequency of generator\n    :param amplitude: amplitude of generator\n    :param phase: initial phase\n    :return: pulse_train gen\n    :rtype: mus_any\n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_219make_pulse_train = {"make_pulse_train", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_219make_pulse_train, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_218make_pulse_train};
static PyObject *__pyx_pw_8pysndlib_3clm_219make_pulse_train(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  double __pyx_v_frequency;
  PyObject *__pyx_v_amplitude = 0;
  PyObject *__pyx_v_phase = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("make_pulse_train (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_frequency,&__pyx_n_s_amplitude,&__pyx_n_s_phase,0};
    PyObject* values[3] = {0,0,0};
    values[1] = ((PyObject *)__pyx_float_1_0);
    values[2] = ((PyObject *)__pyx_float_0_0);
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_frequency)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 2278, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_amplitude);
          if (value) { values[1] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 2278, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_phase);
          if (value) { values[2] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 2278, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "make_pulse_train") < 0)) __PYX_ERR(0, 2278, __pyx_L3_error)
      }
    } else {
      switch (__pyx_nargs) {
        case  3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_frequency = __pyx_PyFloat_AsDouble(values[0]); if (unlikely((__pyx_v_frequency == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 2278, __pyx_L3_error)
    __pyx_v_amplitude = values[1];
    __pyx_v_phase = values[2];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("make_pulse_train", 0, 1, 3, __pyx_nargs); __PYX_ERR(0, 2278, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.make_pulse_train", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pysndlib_3clm_218make_pulse_train(__pyx_self, __pyx_v_frequency, __pyx_v_amplitude, __pyx_v_phase);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_218make_pulse_train(CYTHON_UNUSED PyObject *__pyx_self, double __pyx_v_frequency, PyObject *__pyx_v_amplitude, PyObject *__pyx_v_phase) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("make_pulse_train", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2.__pyx_n = 2;
  __pyx_t_2.amplitude = __pyx_v_amplitude;
  __pyx_t_2.phase = __pyx_v_phase;
  __pyx_t_1 = ((PyObject *)__pyx_f_8pysndlib_3clm_make_pulse_train(__pyx_v_frequency, 0, &__pyx_t_2)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2278, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pysndlib.clm.make_pulse_train", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_codeobj__291 = (PyObject*)__Pyx_PyCode_New(3, 0, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__276, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_make_pulse_train, 2278, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__291)) __PYX_ERR(0, 2278, __pyx_L1_error)
/* … */
  __pyx_t_41 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 2278, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  if (PyDict_SetItem(__pyx_t_41, __pyx_n_s_frequency, __pyx_n_s_float) < 0) __PYX_ERR(0, 2278, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_41, __pyx_n_s_amplitude, __pyx_kp_s_Optional_float) < 0) __PYX_ERR(0, 2278, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_41, __pyx_n_s_phase, __pyx_kp_s_Optional_float) < 0) __PYX_ERR(0, 2278, __pyx_L1_error)
  __pyx_t_37 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_219make_pulse_train, 0, __pyx_n_s_make_pulse_train, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__291)); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 2278, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_37, __pyx_tuple__292);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_37, __pyx_t_41);
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_make_pulse_train, __pyx_t_37) < 0) __PYX_ERR(0, 2278, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
  __pyx_tuple__292 = PyTuple_Pack(2, __pyx_float_1_0, __pyx_float_0_0); if (unlikely(!__pyx_tuple__292)) __PYX_ERR(0, 2278, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__292);
  __Pyx_GIVEREF(__pyx_tuple__292);
/* … */
struct __pyx_opt_args_8pysndlib_3clm_make_pulse_train {
  int __pyx_n;
  PyObject *amplitude;
  PyObject *phase;
};
 2279:     """
 2280:     return a new pulse_train generator. this produces a sequence of impulses.
 2281:     
 2282:     :param frequency: frequency of generator
 2283:     :param amplitude: amplitude of generator
 2284:     :param phase: initial phase
 2285:     :return: pulse_train gen
 2286:     :rtype: mus_any
 2287:     """
 2288: 
+2289:     check_range('frequency', frequency, 0.0, get_srate() / 2)
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_check_range); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2289, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = PyFloat_FromDouble(__pyx_v_frequency); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2289, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = __pyx_f_8pysndlib_3clm_get_srate(0); if (unlikely(__pyx_t_4 == ((double)-1) && PyErr_Occurred())) __PYX_ERR(0, 2289, __pyx_L1_error)
  __pyx_t_5 = PyFloat_FromDouble((__pyx_t_4 / 2.0)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2289, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_6 = NULL;
  __pyx_t_7 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_6)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_6);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
      __pyx_t_7 = 1;
    }
  }
  {
    PyObject *__pyx_callargs[5] = {__pyx_t_6, __pyx_n_s_frequency, __pyx_t_3, __pyx_float_0_0, __pyx_t_5};
    __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_7, 4+__pyx_t_7);
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2289, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 2290: 
+2291:     return mus_any.from_ptr(cclm.mus_make_pulse_train(frequency, amplitude, phase))
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __pyx_t_8 = __pyx_PyFloat_AsDouble(__pyx_v_amplitude); if (unlikely((__pyx_t_8 == ((mus_float_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 2291, __pyx_L1_error)
  __pyx_t_9 = __pyx_PyFloat_AsDouble(__pyx_v_phase); if (unlikely((__pyx_t_9 == ((mus_float_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 2291, __pyx_L1_error)
  __pyx_t_1 = ((PyObject *)__pyx_vtabptr_8pysndlib_3clm_mus_any->from_ptr(mus_make_pulse_train(__pyx_v_frequency, __pyx_t_8, __pyx_t_9), NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2291, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)__pyx_t_1);
  __pyx_t_1 = 0;
  goto __pyx_L0;
 2292: 
+2293: cpdef cython.double pulse_train(gen: mus_any, fm: Optional[float]=None):
static PyObject *__pyx_pw_8pysndlib_3clm_221pulse_train(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static double __pyx_f_8pysndlib_3clm_pulse_train(struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen, CYTHON_UNUSED int __pyx_skip_dispatch, struct __pyx_opt_args_8pysndlib_3clm_pulse_train *__pyx_optional_args) {
  PyObject *__pyx_v_fm = ((PyObject *)Py_None);
  double __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("pulse_train", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_fm = __pyx_optional_args->fm;
    }
  }
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("pysndlib.clm.pulse_train", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_221pulse_train(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_220pulse_train, "\n    next pulse train sample from generator.\n    \n    :param gen: pulse_train gen\n    :param fm: fm input\n    :rtype: float\n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_221pulse_train = {"pulse_train", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_221pulse_train, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_220pulse_train};
static PyObject *__pyx_pw_8pysndlib_3clm_221pulse_train(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen = 0;
  PyObject *__pyx_v_fm = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("pulse_train (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_gen,&__pyx_n_s_fm,0};
    PyObject* values[2] = {0,0};
    values[1] = ((PyObject *)Py_None);
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_gen)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 2293, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_fm);
          if (value) { values[1] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 2293, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "pulse_train") < 0)) __PYX_ERR(0, 2293, __pyx_L3_error)
      }
    } else {
      switch (__pyx_nargs) {
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_gen = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)values[0]);
    __pyx_v_fm = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("pulse_train", 0, 1, 2, __pyx_nargs); __PYX_ERR(0, 2293, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.pulse_train", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_gen), __pyx_ptype_8pysndlib_3clm_mus_any, 0, "gen", 0))) __PYX_ERR(0, 2293, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pysndlib_3clm_220pulse_train(__pyx_self, __pyx_v_gen, __pyx_v_fm);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_220pulse_train(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen, PyObject *__pyx_v_fm) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("pulse_train", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2.__pyx_n = 1;
  __pyx_t_2.fm = __pyx_v_fm;
  __pyx_t_1 = __pyx_f_8pysndlib_3clm_pulse_train(__pyx_v_gen, 0, &__pyx_t_2); if (unlikely(__pyx_t_1 == ((double)-1) && PyErr_Occurred())) __PYX_ERR(0, 2293, __pyx_L1_error)
  __pyx_t_3 = PyFloat_FromDouble(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2293, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_r = __pyx_t_3;
  __pyx_t_3 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("pysndlib.clm.pulse_train", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_37 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 2293, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  if (PyDict_SetItem(__pyx_t_37, __pyx_n_s_gen, __pyx_n_s_mus_any) < 0) __PYX_ERR(0, 2293, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_37, __pyx_n_s_fm, __pyx_kp_s_Optional_float) < 0) __PYX_ERR(0, 2293, __pyx_L1_error)
  __pyx_t_41 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_221pulse_train, 0, __pyx_n_s_pulse_train, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__293)); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 2293, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_41, __pyx_tuple__258);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_41, __pyx_t_37);
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_pulse_train, __pyx_t_41) < 0) __PYX_ERR(0, 2293, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
/* … */
  __pyx_codeobj__293 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__256, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_pulse_train, 2293, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__293)) __PYX_ERR(0, 2293, __pyx_L1_error)
/* … */
struct __pyx_opt_args_8pysndlib_3clm_pulse_train {
  int __pyx_n;
  PyObject *fm;
};
 2294:     """
 2295:     next pulse train sample from generator.
 2296:     
 2297:     :param gen: pulse_train gen
 2298:     :param fm: fm input
 2299:     :rtype: float
 2300:     """
+2301:     if fm:
  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_fm); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 2301, __pyx_L1_error)
  if (__pyx_t_1) {
/* … */
  }
+2302:         return cclm.mus_pulse_train(gen._ptr, fm)
    __pyx_t_2 = __pyx_PyFloat_AsDouble(__pyx_v_fm); if (unlikely((__pyx_t_2 == ((mus_float_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 2302, __pyx_L1_error)
    __pyx_r = mus_pulse_train(__pyx_v_gen->_ptr, __pyx_t_2);
    goto __pyx_L0;
 2303:     else:
+2304:         return cclm.mus_pulse_train_unmodulated(gen._ptr)
  /*else*/ {
    __pyx_r = mus_pulse_train_unmodulated(__pyx_v_gen->_ptr);
    goto __pyx_L0;
  }
 2305: 
+2306: cpdef bint is_pulse_train(gen: mus_any):
static PyObject *__pyx_pw_8pysndlib_3clm_223is_pulse_train(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static int __pyx_f_8pysndlib_3clm_is_pulse_train(struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen, CYTHON_UNUSED int __pyx_skip_dispatch) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_pulse_train", 0);
/* … */
  /* function exit code */
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_223is_pulse_train(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_222is_pulse_train, "\n    returns True if gen is a pulse_train.\n    \n    :param gen: gen\n    :rtype: bool\n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_223is_pulse_train = {"is_pulse_train", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_223is_pulse_train, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_222is_pulse_train};
static PyObject *__pyx_pw_8pysndlib_3clm_223is_pulse_train(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_pulse_train (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_gen,0};
    PyObject* values[1] = {0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_gen)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 2306, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "is_pulse_train") < 0)) __PYX_ERR(0, 2306, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
    }
    __pyx_v_gen = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)values[0]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("is_pulse_train", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 2306, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.is_pulse_train", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_gen), __pyx_ptype_8pysndlib_3clm_mus_any, 0, "gen", 0))) __PYX_ERR(0, 2306, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pysndlib_3clm_222is_pulse_train(__pyx_self, __pyx_v_gen);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_222is_pulse_train(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_pulse_train", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_8pysndlib_3clm_is_pulse_train(__pyx_v_gen, 0); if (unlikely(__pyx_t_1 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 2306, __pyx_L1_error)
  __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2306, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pysndlib.clm.is_pulse_train", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_41 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 2306, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  if (PyDict_SetItem(__pyx_t_41, __pyx_n_s_gen, __pyx_n_s_mus_any) < 0) __PYX_ERR(0, 2306, __pyx_L1_error)
  __pyx_t_37 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_223is_pulse_train, 0, __pyx_n_s_is_pulse_train, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__294)); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 2306, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_37, __pyx_t_41);
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_is_pulse_train, __pyx_t_37) < 0) __PYX_ERR(0, 2306, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
/* … */
  __pyx_codeobj__294 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__46, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_is_pulse_train, 2306, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__294)) __PYX_ERR(0, 2306, __pyx_L1_error)
 2307:     """
 2308:     returns True if gen is a pulse_train.
 2309:     
 2310:     :param gen: gen
 2311:     :rtype: bool
 2312:     """
+2313:     return cclm.mus_is_pulse_train(gen._ptr)
  __pyx_r = mus_is_pulse_train(__pyx_v_gen->_ptr);
  goto __pyx_L0;
 2314: 
 2315: # ---------------- ncos ---------------- #
 2316: 
+2317: cpdef mus_any make_ncos(frequency: float, n: Optional[int]=1):
static PyObject *__pyx_pw_8pysndlib_3clm_225make_ncos(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_f_8pysndlib_3clm_make_ncos(double __pyx_v_frequency, CYTHON_UNUSED int __pyx_skip_dispatch, struct __pyx_opt_args_8pysndlib_3clm_make_ncos *__pyx_optional_args) {
  PyObject *__pyx_v_n = ((PyObject *)__pyx_int_1);
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("make_ncos", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_n = __pyx_optional_args->n;
    }
  }
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_AddTraceback("pysndlib.clm.make_ncos", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_225make_ncos(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_224make_ncos, "\n    return a new ncos generator, producing a sum of 'n' equal amplitude cosines.\n    \n    :param frequency: frequency of generator\n    :param n: number of cosines\n    :return: ncos gen\n    :rtype: mus_any\n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_225make_ncos = {"make_ncos", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_225make_ncos, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_224make_ncos};
static PyObject *__pyx_pw_8pysndlib_3clm_225make_ncos(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  double __pyx_v_frequency;
  PyObject *__pyx_v_n = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("make_ncos (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_frequency,&__pyx_n_s_n,0};
    PyObject* values[2] = {0,0};
    values[1] = ((PyObject *)__pyx_int_1);
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_frequency)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 2317, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_n);
          if (value) { values[1] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 2317, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "make_ncos") < 0)) __PYX_ERR(0, 2317, __pyx_L3_error)
      }
    } else {
      switch (__pyx_nargs) {
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_frequency = __pyx_PyFloat_AsDouble(values[0]); if (unlikely((__pyx_v_frequency == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 2317, __pyx_L3_error)
    __pyx_v_n = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("make_ncos", 0, 1, 2, __pyx_nargs); __PYX_ERR(0, 2317, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.make_ncos", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pysndlib_3clm_224make_ncos(__pyx_self, __pyx_v_frequency, __pyx_v_n);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_224make_ncos(CYTHON_UNUSED PyObject *__pyx_self, double __pyx_v_frequency, PyObject *__pyx_v_n) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("make_ncos", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2.__pyx_n = 1;
  __pyx_t_2.n = __pyx_v_n;
  __pyx_t_1 = ((PyObject *)__pyx_f_8pysndlib_3clm_make_ncos(__pyx_v_frequency, 0, &__pyx_t_2)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2317, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pysndlib.clm.make_ncos", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__295 = PyTuple_Pack(2, __pyx_n_s_frequency, __pyx_n_s_n); if (unlikely(!__pyx_tuple__295)) __PYX_ERR(0, 2317, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__295);
  __Pyx_GIVEREF(__pyx_tuple__295);
  __pyx_codeobj__296 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__295, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_make_ncos, 2317, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__296)) __PYX_ERR(0, 2317, __pyx_L1_error)
/* … */
  __pyx_t_37 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 2317, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  if (PyDict_SetItem(__pyx_t_37, __pyx_n_s_frequency, __pyx_n_s_float) < 0) __PYX_ERR(0, 2317, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_37, __pyx_n_s_n, __pyx_kp_s_Optional_int) < 0) __PYX_ERR(0, 2317, __pyx_L1_error)
  __pyx_t_41 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_225make_ncos, 0, __pyx_n_s_make_ncos, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__296)); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 2317, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_41, __pyx_tuple__297);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_41, __pyx_t_37);
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_make_ncos, __pyx_t_41) < 0) __PYX_ERR(0, 2317, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
  __pyx_tuple__297 = PyTuple_Pack(1, __pyx_int_1); if (unlikely(!__pyx_tuple__297)) __PYX_ERR(0, 2317, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__297);
  __Pyx_GIVEREF(__pyx_tuple__297);
/* … */
struct __pyx_opt_args_8pysndlib_3clm_make_ncos {
  int __pyx_n;
  PyObject *n;
};
 2318:     """
 2319:     return a new ncos generator, producing a sum of 'n' equal amplitude cosines.
 2320:     
 2321:     :param frequency: frequency of generator
 2322:     :param n: number of cosines
 2323:     :return: ncos gen
 2324:     :rtype: mus_any
 2325:     """
 2326: 
+2327:     check_range('frequency', frequency, 0.0, get_srate() / 2)
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_check_range); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2327, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = PyFloat_FromDouble(__pyx_v_frequency); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2327, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = __pyx_f_8pysndlib_3clm_get_srate(0); if (unlikely(__pyx_t_4 == ((double)-1) && PyErr_Occurred())) __PYX_ERR(0, 2327, __pyx_L1_error)
  __pyx_t_5 = PyFloat_FromDouble((__pyx_t_4 / 2.0)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2327, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_6 = NULL;
  __pyx_t_7 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_6)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_6);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
      __pyx_t_7 = 1;
    }
  }
  {
    PyObject *__pyx_callargs[5] = {__pyx_t_6, __pyx_n_s_frequency, __pyx_t_3, __pyx_float_0_0, __pyx_t_5};
    __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_7, 4+__pyx_t_7);
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2327, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+2328:     check_range('n', n, 0, None)
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_check_range); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2328, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_5 = NULL;
  __pyx_t_7 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_5)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_5);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
      __pyx_t_7 = 1;
    }
  }
  {
    PyObject *__pyx_callargs[5] = {__pyx_t_5, __pyx_n_s_n, __pyx_v_n, __pyx_int_0, Py_None};
    __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_7, 4+__pyx_t_7);
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2328, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 2329: 
 2330: 
+2331:     return mus_any.from_ptr(cclm.mus_make_ncos(frequency, n))
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __pyx_t_7 = __Pyx_PyInt_As_int(__pyx_v_n); if (unlikely((__pyx_t_7 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 2331, __pyx_L1_error)
  __pyx_t_1 = ((PyObject *)__pyx_vtabptr_8pysndlib_3clm_mus_any->from_ptr(mus_make_ncos(__pyx_v_frequency, __pyx_t_7), NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2331, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)__pyx_t_1);
  __pyx_t_1 = 0;
  goto __pyx_L0;
 2332: 
+2333: cpdef cython.double ncos(gen: mus_any, fm: Optional[float]=0.0):
static PyObject *__pyx_pw_8pysndlib_3clm_227ncos(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static double __pyx_f_8pysndlib_3clm_ncos(struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen, CYTHON_UNUSED int __pyx_skip_dispatch, struct __pyx_opt_args_8pysndlib_3clm_ncos *__pyx_optional_args) {
  PyObject *__pyx_v_fm = ((PyObject *)__pyx_float_0_0);
  double __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("ncos", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_fm = __pyx_optional_args->fm;
    }
  }
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("pysndlib.clm.ncos", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_227ncos(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_226ncos, "\n    get the next sample from 'gen', an ncos generator.\n    \n    :param gen: ncos gen\n    :param fm: fm input\n    :rtype: float\n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_227ncos = {"ncos", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_227ncos, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_226ncos};
static PyObject *__pyx_pw_8pysndlib_3clm_227ncos(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen = 0;
  PyObject *__pyx_v_fm = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("ncos (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_gen,&__pyx_n_s_fm,0};
    PyObject* values[2] = {0,0};
    values[1] = ((PyObject *)__pyx_float_0_0);
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_gen)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 2333, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_fm);
          if (value) { values[1] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 2333, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "ncos") < 0)) __PYX_ERR(0, 2333, __pyx_L3_error)
      }
    } else {
      switch (__pyx_nargs) {
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_gen = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)values[0]);
    __pyx_v_fm = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("ncos", 0, 1, 2, __pyx_nargs); __PYX_ERR(0, 2333, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.ncos", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_gen), __pyx_ptype_8pysndlib_3clm_mus_any, 0, "gen", 0))) __PYX_ERR(0, 2333, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pysndlib_3clm_226ncos(__pyx_self, __pyx_v_gen, __pyx_v_fm);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_226ncos(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen, PyObject *__pyx_v_fm) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("ncos", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2.__pyx_n = 1;
  __pyx_t_2.fm = __pyx_v_fm;
  __pyx_t_1 = __pyx_f_8pysndlib_3clm_ncos(__pyx_v_gen, 0, &__pyx_t_2); if (unlikely(__pyx_t_1 == ((double)-1) && PyErr_Occurred())) __PYX_ERR(0, 2333, __pyx_L1_error)
  __pyx_t_3 = PyFloat_FromDouble(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2333, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_r = __pyx_t_3;
  __pyx_t_3 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("pysndlib.clm.ncos", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_codeobj__298 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__256, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_ncos, 2333, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__298)) __PYX_ERR(0, 2333, __pyx_L1_error)
/* … */
  __pyx_t_41 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 2333, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  if (PyDict_SetItem(__pyx_t_41, __pyx_n_s_gen, __pyx_n_s_mus_any) < 0) __PYX_ERR(0, 2333, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_41, __pyx_n_s_fm, __pyx_kp_s_Optional_float) < 0) __PYX_ERR(0, 2333, __pyx_L1_error)
  __pyx_t_37 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_227ncos, 0, __pyx_n_s_ncos, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__298)); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 2333, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_37, __pyx_tuple__299);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_37, __pyx_t_41);
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_ncos, __pyx_t_37) < 0) __PYX_ERR(0, 2333, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
  __pyx_tuple__299 = PyTuple_Pack(1, __pyx_float_0_0); if (unlikely(!__pyx_tuple__299)) __PYX_ERR(0, 2333, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__299);
  __Pyx_GIVEREF(__pyx_tuple__299);
/* … */
struct __pyx_opt_args_8pysndlib_3clm_ncos {
  int __pyx_n;
  PyObject *fm;
};
 2334:     """
 2335:     get the next sample from 'gen', an ncos generator.
 2336:     
 2337:     :param gen: ncos gen
 2338:     :param fm: fm input
 2339:     :rtype: float
 2340:     """
+2341:     return cclm.mus_ncos(gen._ptr, fm)
  __pyx_t_1 = __pyx_PyFloat_AsDouble(__pyx_v_fm); if (unlikely((__pyx_t_1 == ((mus_float_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 2341, __pyx_L1_error)
  __pyx_r = mus_ncos(__pyx_v_gen->_ptr, __pyx_t_1);
  goto __pyx_L0;
 2342: 
+2343: cpdef bint is_ncos(gen: mus_any):
static PyObject *__pyx_pw_8pysndlib_3clm_229is_ncos(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static int __pyx_f_8pysndlib_3clm_is_ncos(struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen, CYTHON_UNUSED int __pyx_skip_dispatch) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_ncos", 0);
/* … */
  /* function exit code */
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_229is_ncos(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_228is_ncos, "\n    returns True if gen is a ncos.\n    \n    :param gen: gen\n    :rtype: bool\n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_229is_ncos = {"is_ncos", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_229is_ncos, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_228is_ncos};
static PyObject *__pyx_pw_8pysndlib_3clm_229is_ncos(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_ncos (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_gen,0};
    PyObject* values[1] = {0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_gen)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 2343, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "is_ncos") < 0)) __PYX_ERR(0, 2343, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
    }
    __pyx_v_gen = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)values[0]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("is_ncos", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 2343, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.is_ncos", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_gen), __pyx_ptype_8pysndlib_3clm_mus_any, 0, "gen", 0))) __PYX_ERR(0, 2343, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pysndlib_3clm_228is_ncos(__pyx_self, __pyx_v_gen);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_228is_ncos(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_ncos", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_8pysndlib_3clm_is_ncos(__pyx_v_gen, 0); if (unlikely(__pyx_t_1 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 2343, __pyx_L1_error)
  __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2343, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pysndlib.clm.is_ncos", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_37 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 2343, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  if (PyDict_SetItem(__pyx_t_37, __pyx_n_s_gen, __pyx_n_s_mus_any) < 0) __PYX_ERR(0, 2343, __pyx_L1_error)
  __pyx_t_41 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_229is_ncos, 0, __pyx_n_s_is_ncos, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__300)); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 2343, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_41, __pyx_t_37);
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_is_ncos, __pyx_t_41) < 0) __PYX_ERR(0, 2343, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
/* … */
  __pyx_codeobj__300 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__46, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_is_ncos, 2343, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__300)) __PYX_ERR(0, 2343, __pyx_L1_error)
 2344:     """
 2345:     returns True if gen is a ncos.
 2346:     
 2347:     :param gen: gen
 2348:     :rtype: bool
 2349:     """
+2350:     return cclm.mus_is_ncos(gen._ptr)
  __pyx_r = mus_is_ncos(__pyx_v_gen->_ptr);
  goto __pyx_L0;
 2351: 
 2352: 
 2353: # ---------------- nsin ---------------- #
+2354: cpdef mus_any make_nsin(frequency: float, n: Optional[int]=1):
static PyObject *__pyx_pw_8pysndlib_3clm_231make_nsin(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_f_8pysndlib_3clm_make_nsin(double __pyx_v_frequency, CYTHON_UNUSED int __pyx_skip_dispatch, struct __pyx_opt_args_8pysndlib_3clm_make_nsin *__pyx_optional_args) {
  PyObject *__pyx_v_n = ((PyObject *)__pyx_int_1);
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("make_nsin", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_n = __pyx_optional_args->n;
    }
  }
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_AddTraceback("pysndlib.clm.make_nsin", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_231make_nsin(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_230make_nsin, "\n    return a new nsin generator, producing a sum of 'n' equal amplitude sines.\n    \n    :param frequency: frequency of generator\n    :param n: number of sines\n    :return: nsin gen\n    :rtype: mus_any\n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_231make_nsin = {"make_nsin", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_231make_nsin, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_230make_nsin};
static PyObject *__pyx_pw_8pysndlib_3clm_231make_nsin(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  double __pyx_v_frequency;
  PyObject *__pyx_v_n = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("make_nsin (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_frequency,&__pyx_n_s_n,0};
    PyObject* values[2] = {0,0};
    values[1] = ((PyObject *)__pyx_int_1);
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_frequency)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 2354, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_n);
          if (value) { values[1] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 2354, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "make_nsin") < 0)) __PYX_ERR(0, 2354, __pyx_L3_error)
      }
    } else {
      switch (__pyx_nargs) {
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_frequency = __pyx_PyFloat_AsDouble(values[0]); if (unlikely((__pyx_v_frequency == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 2354, __pyx_L3_error)
    __pyx_v_n = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("make_nsin", 0, 1, 2, __pyx_nargs); __PYX_ERR(0, 2354, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.make_nsin", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pysndlib_3clm_230make_nsin(__pyx_self, __pyx_v_frequency, __pyx_v_n);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_230make_nsin(CYTHON_UNUSED PyObject *__pyx_self, double __pyx_v_frequency, PyObject *__pyx_v_n) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("make_nsin", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2.__pyx_n = 1;
  __pyx_t_2.n = __pyx_v_n;
  __pyx_t_1 = ((PyObject *)__pyx_f_8pysndlib_3clm_make_nsin(__pyx_v_frequency, 0, &__pyx_t_2)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2354, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pysndlib.clm.make_nsin", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_41 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 2354, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  if (PyDict_SetItem(__pyx_t_41, __pyx_n_s_frequency, __pyx_n_s_float) < 0) __PYX_ERR(0, 2354, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_41, __pyx_n_s_n, __pyx_kp_s_Optional_int) < 0) __PYX_ERR(0, 2354, __pyx_L1_error)
  __pyx_t_37 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_231make_nsin, 0, __pyx_n_s_make_nsin, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__301)); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 2354, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_37, __pyx_tuple__297);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_37, __pyx_t_41);
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_make_nsin, __pyx_t_37) < 0) __PYX_ERR(0, 2354, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
/* … */
  __pyx_codeobj__301 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__295, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_make_nsin, 2354, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__301)) __PYX_ERR(0, 2354, __pyx_L1_error)
/* … */
struct __pyx_opt_args_8pysndlib_3clm_make_nsin {
  int __pyx_n;
  PyObject *n;
};
 2355:     """
 2356:     return a new nsin generator, producing a sum of 'n' equal amplitude sines.
 2357:     
 2358:     :param frequency: frequency of generator
 2359:     :param n: number of sines
 2360:     :return: nsin gen
 2361:     :rtype: mus_any
 2362:     """
 2363: 
+2364:     check_range('frequency', frequency, 0.0, get_srate() / 2)
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_check_range); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2364, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = PyFloat_FromDouble(__pyx_v_frequency); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2364, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = __pyx_f_8pysndlib_3clm_get_srate(0); if (unlikely(__pyx_t_4 == ((double)-1) && PyErr_Occurred())) __PYX_ERR(0, 2364, __pyx_L1_error)
  __pyx_t_5 = PyFloat_FromDouble((__pyx_t_4 / 2.0)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2364, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_6 = NULL;
  __pyx_t_7 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_6)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_6);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
      __pyx_t_7 = 1;
    }
  }
  {
    PyObject *__pyx_callargs[5] = {__pyx_t_6, __pyx_n_s_frequency, __pyx_t_3, __pyx_float_0_0, __pyx_t_5};
    __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_7, 4+__pyx_t_7);
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2364, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+2365:     check_range('n', n, 0, None)
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_check_range); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2365, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_5 = NULL;
  __pyx_t_7 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_5)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_5);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
      __pyx_t_7 = 1;
    }
  }
  {
    PyObject *__pyx_callargs[5] = {__pyx_t_5, __pyx_n_s_n, __pyx_v_n, __pyx_int_0, Py_None};
    __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_7, 4+__pyx_t_7);
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2365, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 2366: 
+2367:     return mus_any.from_ptr(cclm.mus_make_nsin(frequency, n))
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __pyx_t_7 = __Pyx_PyInt_As_int(__pyx_v_n); if (unlikely((__pyx_t_7 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 2367, __pyx_L1_error)
  __pyx_t_1 = ((PyObject *)__pyx_vtabptr_8pysndlib_3clm_mus_any->from_ptr(mus_make_nsin(__pyx_v_frequency, __pyx_t_7), NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2367, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)__pyx_t_1);
  __pyx_t_1 = 0;
  goto __pyx_L0;
 2368: 
+2369: cpdef cython.double nsin(gen: mus_any, fm: Optional[float]=0.0):
static PyObject *__pyx_pw_8pysndlib_3clm_233nsin(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static double __pyx_f_8pysndlib_3clm_nsin(struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen, CYTHON_UNUSED int __pyx_skip_dispatch, struct __pyx_opt_args_8pysndlib_3clm_nsin *__pyx_optional_args) {
  PyObject *__pyx_v_fm = ((PyObject *)__pyx_float_0_0);
  double __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("nsin", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_fm = __pyx_optional_args->fm;
    }
  }
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("pysndlib.clm.nsin", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_233nsin(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_232nsin, "\n    get the next sample from 'gen', an nsin generator.\n    \n    :param gen: ncos gen\n    :param fm: fm input\n    :rtype: float\n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_233nsin = {"nsin", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_233nsin, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_232nsin};
static PyObject *__pyx_pw_8pysndlib_3clm_233nsin(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen = 0;
  PyObject *__pyx_v_fm = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("nsin (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_gen,&__pyx_n_s_fm,0};
    PyObject* values[2] = {0,0};
    values[1] = ((PyObject *)__pyx_float_0_0);
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_gen)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 2369, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_fm);
          if (value) { values[1] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 2369, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "nsin") < 0)) __PYX_ERR(0, 2369, __pyx_L3_error)
      }
    } else {
      switch (__pyx_nargs) {
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_gen = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)values[0]);
    __pyx_v_fm = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("nsin", 0, 1, 2, __pyx_nargs); __PYX_ERR(0, 2369, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.nsin", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_gen), __pyx_ptype_8pysndlib_3clm_mus_any, 0, "gen", 0))) __PYX_ERR(0, 2369, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pysndlib_3clm_232nsin(__pyx_self, __pyx_v_gen, __pyx_v_fm);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_232nsin(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen, PyObject *__pyx_v_fm) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("nsin", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2.__pyx_n = 1;
  __pyx_t_2.fm = __pyx_v_fm;
  __pyx_t_1 = __pyx_f_8pysndlib_3clm_nsin(__pyx_v_gen, 0, &__pyx_t_2); if (unlikely(__pyx_t_1 == ((double)-1) && PyErr_Occurred())) __PYX_ERR(0, 2369, __pyx_L1_error)
  __pyx_t_3 = PyFloat_FromDouble(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2369, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_r = __pyx_t_3;
  __pyx_t_3 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("pysndlib.clm.nsin", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_codeobj__302 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__256, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_nsin, 2369, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__302)) __PYX_ERR(0, 2369, __pyx_L1_error)
/* … */
  __pyx_t_37 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 2369, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  if (PyDict_SetItem(__pyx_t_37, __pyx_n_s_gen, __pyx_n_s_mus_any) < 0) __PYX_ERR(0, 2369, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_37, __pyx_n_s_fm, __pyx_kp_s_Optional_float) < 0) __PYX_ERR(0, 2369, __pyx_L1_error)
  __pyx_t_41 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_233nsin, 0, __pyx_n_s_nsin, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__302)); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 2369, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_41, __pyx_tuple__303);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_41, __pyx_t_37);
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_nsin, __pyx_t_41) < 0) __PYX_ERR(0, 2369, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
  __pyx_tuple__303 = PyTuple_Pack(1, __pyx_float_0_0); if (unlikely(!__pyx_tuple__303)) __PYX_ERR(0, 2369, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__303);
  __Pyx_GIVEREF(__pyx_tuple__303);
/* … */
struct __pyx_opt_args_8pysndlib_3clm_nsin {
  int __pyx_n;
  PyObject *fm;
};
 2370:     """
 2371:     get the next sample from 'gen', an nsin generator.
 2372:     
 2373:     :param gen: ncos gen
 2374:     :param fm: fm input
 2375:     :rtype: float
 2376:     """
+2377:     return cclm.mus_nsin(gen._ptr, fm)
  __pyx_t_1 = __pyx_PyFloat_AsDouble(__pyx_v_fm); if (unlikely((__pyx_t_1 == ((mus_float_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 2377, __pyx_L1_error)
  __pyx_r = mus_nsin(__pyx_v_gen->_ptr, __pyx_t_1);
  goto __pyx_L0;
 2378: 
+2379: cpdef bint is_nsin(gen: mus_any):
static PyObject *__pyx_pw_8pysndlib_3clm_235is_nsin(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static int __pyx_f_8pysndlib_3clm_is_nsin(struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen, CYTHON_UNUSED int __pyx_skip_dispatch) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_nsin", 0);
/* … */
  /* function exit code */
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_235is_nsin(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_234is_nsin, "\n    returns True if gen is a nsin.\n    \n    :param gen: gen\n    :rtype: bool\n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_235is_nsin = {"is_nsin", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_235is_nsin, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_234is_nsin};
static PyObject *__pyx_pw_8pysndlib_3clm_235is_nsin(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_nsin (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_gen,0};
    PyObject* values[1] = {0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_gen)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 2379, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "is_nsin") < 0)) __PYX_ERR(0, 2379, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
    }
    __pyx_v_gen = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)values[0]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("is_nsin", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 2379, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.is_nsin", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_gen), __pyx_ptype_8pysndlib_3clm_mus_any, 0, "gen", 0))) __PYX_ERR(0, 2379, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pysndlib_3clm_234is_nsin(__pyx_self, __pyx_v_gen);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_234is_nsin(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_nsin", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_8pysndlib_3clm_is_nsin(__pyx_v_gen, 0); if (unlikely(__pyx_t_1 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 2379, __pyx_L1_error)
  __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2379, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pysndlib.clm.is_nsin", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_41 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 2379, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  if (PyDict_SetItem(__pyx_t_41, __pyx_n_s_gen, __pyx_n_s_mus_any) < 0) __PYX_ERR(0, 2379, __pyx_L1_error)
  __pyx_t_37 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_235is_nsin, 0, __pyx_n_s_is_nsin, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__304)); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 2379, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_37, __pyx_t_41);
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_is_nsin, __pyx_t_37) < 0) __PYX_ERR(0, 2379, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
/* … */
  __pyx_codeobj__304 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__46, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_is_nsin, 2379, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__304)) __PYX_ERR(0, 2379, __pyx_L1_error)
 2380:     """
 2381:     returns True if gen is a nsin.
 2382:     
 2383:     :param gen: gen
 2384:     :rtype: bool
 2385:     """
+2386:     return cclm.mus_is_nsin(gen._ptr)
  __pyx_r = mus_is_nsin(__pyx_v_gen->_ptr);
  goto __pyx_L0;
 2387: 
 2388: # ---------------- nrxysin and nrxycos ---------------- #
 2389: 
+2390: cpdef mus_any make_nrxysin(frequency: float, ratio: Optional[float]=1., n: Optional[int]=1, r: Optional[float]=.5):
static PyObject *__pyx_pw_8pysndlib_3clm_237make_nrxysin(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_f_8pysndlib_3clm_make_nrxysin(double __pyx_v_frequency, CYTHON_UNUSED int __pyx_skip_dispatch, struct __pyx_opt_args_8pysndlib_3clm_make_nrxysin *__pyx_optional_args) {
  PyObject *__pyx_v_ratio = ((PyObject *)__pyx_float_1_);
  PyObject *__pyx_v_n = ((PyObject *)__pyx_int_1);
  PyObject *__pyx_v_r = ((PyObject *)__pyx_float__5);
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("make_nrxysin", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_ratio = __pyx_optional_args->ratio;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_n = __pyx_optional_args->n;
        if (__pyx_optional_args->__pyx_n > 2) {
          __pyx_v_r = __pyx_optional_args->r;
        }
      }
    }
  }
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_AddTraceback("pysndlib.clm.make_nrxysin", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_237make_nrxysin(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_236make_nrxysin, "\n    return a new nrxysin generator.\n    \n    :param frequency: frequency of generator\n    :param ratio: ratio between frequency and the spacing between successive sidebands\n    :param n: number of sidebands\n    :param r: amplitude ratio between successive sidebands (-1.0 < r < 1.0)\n    :return: nrxysin gen\n    :rtype: mus_any\n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_237make_nrxysin = {"make_nrxysin", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_237make_nrxysin, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_236make_nrxysin};
static PyObject *__pyx_pw_8pysndlib_3clm_237make_nrxysin(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  double __pyx_v_frequency;
  PyObject *__pyx_v_ratio = 0;
  PyObject *__pyx_v_n = 0;
  PyObject *__pyx_v_r = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("make_nrxysin (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_frequency,&__pyx_n_s_ratio,&__pyx_n_s_n,&__pyx_n_s_r,0};
    PyObject* values[4] = {0,0,0,0};
    values[1] = ((PyObject *)__pyx_float_1_);
    values[2] = ((PyObject *)__pyx_int_1);
    values[3] = ((PyObject *)__pyx_float__5);
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  4: values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_frequency)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 2390, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_ratio);
          if (value) { values[1] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 2390, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_n);
          if (value) { values[2] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 2390, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_r);
          if (value) { values[3] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 2390, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "make_nrxysin") < 0)) __PYX_ERR(0, 2390, __pyx_L3_error)
      }
    } else {
      switch (__pyx_nargs) {
        case  4: values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_frequency = __pyx_PyFloat_AsDouble(values[0]); if (unlikely((__pyx_v_frequency == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 2390, __pyx_L3_error)
    __pyx_v_ratio = values[1];
    __pyx_v_n = values[2];
    __pyx_v_r = values[3];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("make_nrxysin", 0, 1, 4, __pyx_nargs); __PYX_ERR(0, 2390, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.make_nrxysin", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pysndlib_3clm_236make_nrxysin(__pyx_self, __pyx_v_frequency, __pyx_v_ratio, __pyx_v_n, __pyx_v_r);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_236make_nrxysin(CYTHON_UNUSED PyObject *__pyx_self, double __pyx_v_frequency, PyObject *__pyx_v_ratio, PyObject *__pyx_v_n, PyObject *__pyx_v_r) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("make_nrxysin", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2.__pyx_n = 3;
  __pyx_t_2.ratio = __pyx_v_ratio;
  __pyx_t_2.n = __pyx_v_n;
  __pyx_t_2.r = __pyx_v_r;
  __pyx_t_1 = ((PyObject *)__pyx_f_8pysndlib_3clm_make_nrxysin(__pyx_v_frequency, 0, &__pyx_t_2)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2390, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pysndlib.clm.make_nrxysin", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__305 = PyTuple_Pack(4, __pyx_n_s_frequency, __pyx_n_s_ratio, __pyx_n_s_n, __pyx_n_s_r); if (unlikely(!__pyx_tuple__305)) __PYX_ERR(0, 2390, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__305);
  __Pyx_GIVEREF(__pyx_tuple__305);
  __pyx_codeobj__306 = (PyObject*)__Pyx_PyCode_New(4, 0, 0, 4, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__305, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_make_nrxysin, 2390, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__306)) __PYX_ERR(0, 2390, __pyx_L1_error)
/* … */
  __pyx_t_37 = __Pyx_PyDict_NewPresized(4); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 2390, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  if (PyDict_SetItem(__pyx_t_37, __pyx_n_s_frequency, __pyx_n_s_float) < 0) __PYX_ERR(0, 2390, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_37, __pyx_n_s_ratio, __pyx_kp_s_Optional_float) < 0) __PYX_ERR(0, 2390, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_37, __pyx_n_s_n, __pyx_kp_s_Optional_int) < 0) __PYX_ERR(0, 2390, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_37, __pyx_n_s_r, __pyx_kp_s_Optional_float) < 0) __PYX_ERR(0, 2390, __pyx_L1_error)
  __pyx_t_41 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_237make_nrxysin, 0, __pyx_n_s_make_nrxysin, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__306)); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 2390, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_41, __pyx_tuple__307);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_41, __pyx_t_37);
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_make_nrxysin, __pyx_t_41) < 0) __PYX_ERR(0, 2390, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
  __pyx_tuple__307 = PyTuple_Pack(3, __pyx_float_1_, __pyx_int_1, __pyx_float__5); if (unlikely(!__pyx_tuple__307)) __PYX_ERR(0, 2390, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__307);
  __Pyx_GIVEREF(__pyx_tuple__307);
/* … */
struct __pyx_opt_args_8pysndlib_3clm_make_nrxysin {
  int __pyx_n;
  PyObject *ratio;
  PyObject *n;
  PyObject *r;
};
 2391:     """
 2392:     return a new nrxysin generator.
 2393:     
 2394:     :param frequency: frequency of generator
 2395:     :param ratio: ratio between frequency and the spacing between successive sidebands
 2396:     :param n: number of sidebands
 2397:     :param r: amplitude ratio between successive sidebands (-1.0 < r < 1.0)
 2398:     :return: nrxysin gen
 2399:     :rtype: mus_any
 2400:     """
+2401:     check_range('frequency', frequency, 0.0, get_srate() / 2)
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_check_range); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2401, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = PyFloat_FromDouble(__pyx_v_frequency); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2401, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = __pyx_f_8pysndlib_3clm_get_srate(0); if (unlikely(__pyx_t_4 == ((double)-1) && PyErr_Occurred())) __PYX_ERR(0, 2401, __pyx_L1_error)
  __pyx_t_5 = PyFloat_FromDouble((__pyx_t_4 / 2.0)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2401, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_6 = NULL;
  __pyx_t_7 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_6)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_6);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
      __pyx_t_7 = 1;
    }
  }
  {
    PyObject *__pyx_callargs[5] = {__pyx_t_6, __pyx_n_s_frequency, __pyx_t_3, __pyx_float_0_0, __pyx_t_5};
    __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_7, 4+__pyx_t_7);
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2401, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+2402:     check_range('r', r, -1.0, 1.0)
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_check_range); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2402, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_5 = NULL;
  __pyx_t_7 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_5)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_5);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
      __pyx_t_7 = 1;
    }
  }
  {
    PyObject *__pyx_callargs[5] = {__pyx_t_5, __pyx_n_s_r, __pyx_v_r, __pyx_float_neg_1_0, __pyx_float_1_0};
    __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_7, 4+__pyx_t_7);
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2402, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+2403:     check_range('n', n, 0, None)
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_check_range); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2403, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_5 = NULL;
  __pyx_t_7 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_5)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_5);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
      __pyx_t_7 = 1;
    }
  }
  {
    PyObject *__pyx_callargs[5] = {__pyx_t_5, __pyx_n_s_n, __pyx_v_n, __pyx_int_0, Py_None};
    __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_7, 4+__pyx_t_7);
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2403, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 2404: 
+2405:     return mus_any.from_ptr(cclm.mus_make_nrxysin(frequency, ratio, n, r))
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __pyx_t_8 = __pyx_PyFloat_AsDouble(__pyx_v_ratio); if (unlikely((__pyx_t_8 == ((mus_float_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 2405, __pyx_L1_error)
  __pyx_t_7 = __Pyx_PyInt_As_int(__pyx_v_n); if (unlikely((__pyx_t_7 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 2405, __pyx_L1_error)
  __pyx_t_9 = __pyx_PyFloat_AsDouble(__pyx_v_r); if (unlikely((__pyx_t_9 == ((mus_float_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 2405, __pyx_L1_error)
  __pyx_t_1 = ((PyObject *)__pyx_vtabptr_8pysndlib_3clm_mus_any->from_ptr(mus_make_nrxysin(__pyx_v_frequency, __pyx_t_8, __pyx_t_7, __pyx_t_9), NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2405, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)__pyx_t_1);
  __pyx_t_1 = 0;
  goto __pyx_L0;
 2406: 
+2407: cpdef cython.double nrxysin(gen: mus_any, fm: Optional[float]=0.):
static PyObject *__pyx_pw_8pysndlib_3clm_239nrxysin(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static double __pyx_f_8pysndlib_3clm_nrxysin(struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen, CYTHON_UNUSED int __pyx_skip_dispatch, struct __pyx_opt_args_8pysndlib_3clm_nrxysin *__pyx_optional_args) {
  PyObject *__pyx_v_fm = ((PyObject *)__pyx_float_0_);
  double __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("nrxysin", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_fm = __pyx_optional_args->fm;
    }
  }
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("pysndlib.clm.nrxysin", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_239nrxysin(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_238nrxysin, "\n    next sample of nrxysin generator.\n    \n    :param gen: ncos gen\n    :param fm: fm input\n    :rtype: float\n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_239nrxysin = {"nrxysin", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_239nrxysin, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_238nrxysin};
static PyObject *__pyx_pw_8pysndlib_3clm_239nrxysin(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen = 0;
  PyObject *__pyx_v_fm = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("nrxysin (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_gen,&__pyx_n_s_fm,0};
    PyObject* values[2] = {0,0};
    values[1] = ((PyObject *)__pyx_float_0_);
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_gen)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 2407, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_fm);
          if (value) { values[1] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 2407, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "nrxysin") < 0)) __PYX_ERR(0, 2407, __pyx_L3_error)
      }
    } else {
      switch (__pyx_nargs) {
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_gen = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)values[0]);
    __pyx_v_fm = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("nrxysin", 0, 1, 2, __pyx_nargs); __PYX_ERR(0, 2407, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.nrxysin", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_gen), __pyx_ptype_8pysndlib_3clm_mus_any, 0, "gen", 0))) __PYX_ERR(0, 2407, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pysndlib_3clm_238nrxysin(__pyx_self, __pyx_v_gen, __pyx_v_fm);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_238nrxysin(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen, PyObject *__pyx_v_fm) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("nrxysin", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2.__pyx_n = 1;
  __pyx_t_2.fm = __pyx_v_fm;
  __pyx_t_1 = __pyx_f_8pysndlib_3clm_nrxysin(__pyx_v_gen, 0, &__pyx_t_2); if (unlikely(__pyx_t_1 == ((double)-1) && PyErr_Occurred())) __PYX_ERR(0, 2407, __pyx_L1_error)
  __pyx_t_3 = PyFloat_FromDouble(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2407, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_r = __pyx_t_3;
  __pyx_t_3 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("pysndlib.clm.nrxysin", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_codeobj__308 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__256, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_nrxysin, 2407, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__308)) __PYX_ERR(0, 2407, __pyx_L1_error)
/* … */
  __pyx_t_41 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 2407, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  if (PyDict_SetItem(__pyx_t_41, __pyx_n_s_gen, __pyx_n_s_mus_any) < 0) __PYX_ERR(0, 2407, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_41, __pyx_n_s_fm, __pyx_kp_s_Optional_float) < 0) __PYX_ERR(0, 2407, __pyx_L1_error)
  __pyx_t_37 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_239nrxysin, 0, __pyx_n_s_nrxysin, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__308)); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 2407, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_37, __pyx_tuple__309);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_37, __pyx_t_41);
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_nrxysin, __pyx_t_37) < 0) __PYX_ERR(0, 2407, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
  __pyx_tuple__309 = PyTuple_Pack(1, __pyx_float_0_); if (unlikely(!__pyx_tuple__309)) __PYX_ERR(0, 2407, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__309);
  __Pyx_GIVEREF(__pyx_tuple__309);
/* … */
struct __pyx_opt_args_8pysndlib_3clm_nrxysin {
  int __pyx_n;
  PyObject *fm;
};
 2408:     """
 2409:     next sample of nrxysin generator.
 2410:     
 2411:     :param gen: ncos gen
 2412:     :param fm: fm input
 2413:     :rtype: float
 2414:     """
+2415:     return cclm.mus_nrxysin(gen._ptr, fm)
  __pyx_t_1 = __pyx_PyFloat_AsDouble(__pyx_v_fm); if (unlikely((__pyx_t_1 == ((mus_float_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 2415, __pyx_L1_error)
  __pyx_r = mus_nrxysin(__pyx_v_gen->_ptr, __pyx_t_1);
  goto __pyx_L0;
 2416: 
+2417: cpdef bint is_nrxysin(gen: mus_any):
static PyObject *__pyx_pw_8pysndlib_3clm_241is_nrxysin(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static int __pyx_f_8pysndlib_3clm_is_nrxysin(struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen, CYTHON_UNUSED int __pyx_skip_dispatch) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_nrxysin", 0);
/* … */
  /* function exit code */
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_241is_nrxysin(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_240is_nrxysin, "\n    returns True if gen is a nrxysin.\n    \n    :param gen: gen\n    :rtype: bool\n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_241is_nrxysin = {"is_nrxysin", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_241is_nrxysin, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_240is_nrxysin};
static PyObject *__pyx_pw_8pysndlib_3clm_241is_nrxysin(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_nrxysin (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_gen,0};
    PyObject* values[1] = {0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_gen)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 2417, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "is_nrxysin") < 0)) __PYX_ERR(0, 2417, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
    }
    __pyx_v_gen = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)values[0]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("is_nrxysin", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 2417, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.is_nrxysin", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_gen), __pyx_ptype_8pysndlib_3clm_mus_any, 0, "gen", 0))) __PYX_ERR(0, 2417, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pysndlib_3clm_240is_nrxysin(__pyx_self, __pyx_v_gen);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_240is_nrxysin(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_nrxysin", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_8pysndlib_3clm_is_nrxysin(__pyx_v_gen, 0); if (unlikely(__pyx_t_1 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 2417, __pyx_L1_error)
  __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2417, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pysndlib.clm.is_nrxysin", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_37 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 2417, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  if (PyDict_SetItem(__pyx_t_37, __pyx_n_s_gen, __pyx_n_s_mus_any) < 0) __PYX_ERR(0, 2417, __pyx_L1_error)
  __pyx_t_41 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_241is_nrxysin, 0, __pyx_n_s_is_nrxysin, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__310)); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 2417, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_41, __pyx_t_37);
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_is_nrxysin, __pyx_t_41) < 0) __PYX_ERR(0, 2417, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
/* … */
  __pyx_codeobj__310 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__46, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_is_nrxysin, 2417, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__310)) __PYX_ERR(0, 2417, __pyx_L1_error)
 2418:     """
 2419:     returns True if gen is a nrxysin.
 2420:     
 2421:     :param gen: gen
 2422:     :rtype: bool
 2423:     """
+2424:     return cclm.mus_is_nrxysin(gen._ptr)
  __pyx_r = mus_is_nrxysin(__pyx_v_gen->_ptr);
  goto __pyx_L0;
 2425: 
 2426: 
+2427: cpdef mus_any make_nrxycos(frequency: float, ratio: Optional[float]=1., n: Optional[int]=1, r: Optional[float]=.5):
static PyObject *__pyx_pw_8pysndlib_3clm_243make_nrxycos(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_f_8pysndlib_3clm_make_nrxycos(double __pyx_v_frequency, CYTHON_UNUSED int __pyx_skip_dispatch, struct __pyx_opt_args_8pysndlib_3clm_make_nrxycos *__pyx_optional_args) {
  PyObject *__pyx_v_ratio = ((PyObject *)__pyx_float_1_);
  PyObject *__pyx_v_n = ((PyObject *)__pyx_int_1);
  PyObject *__pyx_v_r = ((PyObject *)__pyx_float__5);
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("make_nrxycos", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_ratio = __pyx_optional_args->ratio;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_n = __pyx_optional_args->n;
        if (__pyx_optional_args->__pyx_n > 2) {
          __pyx_v_r = __pyx_optional_args->r;
        }
      }
    }
  }
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_AddTraceback("pysndlib.clm.make_nrxycos", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_243make_nrxycos(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_242make_nrxycos, "\n    return a new nrxycos generator.\n    \n    :param frequency: frequency of generator\n    :param ratio: ratio between frequency and the spacing between successive sidebands\n    :param n: number of sidebands\n    :param r: amplitude ratio between successive sidebands (-1.0 < r < 1.0)\n    :return: nrxycos gen\n    :rtype: mus_any\n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_243make_nrxycos = {"make_nrxycos", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_243make_nrxycos, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_242make_nrxycos};
static PyObject *__pyx_pw_8pysndlib_3clm_243make_nrxycos(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  double __pyx_v_frequency;
  PyObject *__pyx_v_ratio = 0;
  PyObject *__pyx_v_n = 0;
  PyObject *__pyx_v_r = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("make_nrxycos (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_frequency,&__pyx_n_s_ratio,&__pyx_n_s_n,&__pyx_n_s_r,0};
    PyObject* values[4] = {0,0,0,0};
    values[1] = ((PyObject *)__pyx_float_1_);
    values[2] = ((PyObject *)__pyx_int_1);
    values[3] = ((PyObject *)__pyx_float__5);
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  4: values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_frequency)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 2427, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_ratio);
          if (value) { values[1] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 2427, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_n);
          if (value) { values[2] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 2427, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_r);
          if (value) { values[3] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 2427, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "make_nrxycos") < 0)) __PYX_ERR(0, 2427, __pyx_L3_error)
      }
    } else {
      switch (__pyx_nargs) {
        case  4: values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_frequency = __pyx_PyFloat_AsDouble(values[0]); if (unlikely((__pyx_v_frequency == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 2427, __pyx_L3_error)
    __pyx_v_ratio = values[1];
    __pyx_v_n = values[2];
    __pyx_v_r = values[3];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("make_nrxycos", 0, 1, 4, __pyx_nargs); __PYX_ERR(0, 2427, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.make_nrxycos", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pysndlib_3clm_242make_nrxycos(__pyx_self, __pyx_v_frequency, __pyx_v_ratio, __pyx_v_n, __pyx_v_r);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_242make_nrxycos(CYTHON_UNUSED PyObject *__pyx_self, double __pyx_v_frequency, PyObject *__pyx_v_ratio, PyObject *__pyx_v_n, PyObject *__pyx_v_r) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("make_nrxycos", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2.__pyx_n = 3;
  __pyx_t_2.ratio = __pyx_v_ratio;
  __pyx_t_2.n = __pyx_v_n;
  __pyx_t_2.r = __pyx_v_r;
  __pyx_t_1 = ((PyObject *)__pyx_f_8pysndlib_3clm_make_nrxycos(__pyx_v_frequency, 0, &__pyx_t_2)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2427, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pysndlib.clm.make_nrxycos", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_codeobj__311 = (PyObject*)__Pyx_PyCode_New(4, 0, 0, 4, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__305, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_make_nrxycos, 2427, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__311)) __PYX_ERR(0, 2427, __pyx_L1_error)
/* … */
  __pyx_t_41 = __Pyx_PyDict_NewPresized(4); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 2427, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  if (PyDict_SetItem(__pyx_t_41, __pyx_n_s_frequency, __pyx_n_s_float) < 0) __PYX_ERR(0, 2427, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_41, __pyx_n_s_ratio, __pyx_kp_s_Optional_float) < 0) __PYX_ERR(0, 2427, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_41, __pyx_n_s_n, __pyx_kp_s_Optional_int) < 0) __PYX_ERR(0, 2427, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_41, __pyx_n_s_r, __pyx_kp_s_Optional_float) < 0) __PYX_ERR(0, 2427, __pyx_L1_error)
  __pyx_t_37 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_243make_nrxycos, 0, __pyx_n_s_make_nrxycos, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__311)); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 2427, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_37, __pyx_tuple__312);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_37, __pyx_t_41);
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_make_nrxycos, __pyx_t_37) < 0) __PYX_ERR(0, 2427, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
  __pyx_tuple__312 = PyTuple_Pack(3, __pyx_float_1_, __pyx_int_1, __pyx_float__5); if (unlikely(!__pyx_tuple__312)) __PYX_ERR(0, 2427, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__312);
  __Pyx_GIVEREF(__pyx_tuple__312);
/* … */
struct __pyx_opt_args_8pysndlib_3clm_make_nrxycos {
  int __pyx_n;
  PyObject *ratio;
  PyObject *n;
  PyObject *r;
};
 2428:     """
 2429:     return a new nrxycos generator.
 2430:     
 2431:     :param frequency: frequency of generator
 2432:     :param ratio: ratio between frequency and the spacing between successive sidebands
 2433:     :param n: number of sidebands
 2434:     :param r: amplitude ratio between successive sidebands (-1.0 < r < 1.0)
 2435:     :return: nrxycos gen
 2436:     :rtype: mus_any
 2437:     """
 2438: 
+2439:     check_range('frequency', frequency, 0.0, get_srate() / 2)
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_check_range); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2439, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = PyFloat_FromDouble(__pyx_v_frequency); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2439, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = __pyx_f_8pysndlib_3clm_get_srate(0); if (unlikely(__pyx_t_4 == ((double)-1) && PyErr_Occurred())) __PYX_ERR(0, 2439, __pyx_L1_error)
  __pyx_t_5 = PyFloat_FromDouble((__pyx_t_4 / 2.0)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2439, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_6 = NULL;
  __pyx_t_7 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_6)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_6);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
      __pyx_t_7 = 1;
    }
  }
  {
    PyObject *__pyx_callargs[5] = {__pyx_t_6, __pyx_n_s_frequency, __pyx_t_3, __pyx_float_0_0, __pyx_t_5};
    __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_7, 4+__pyx_t_7);
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2439, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+2440:     check_range('r', r, -1.0, 1.0)
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_check_range); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2440, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_5 = NULL;
  __pyx_t_7 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_5)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_5);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
      __pyx_t_7 = 1;
    }
  }
  {
    PyObject *__pyx_callargs[5] = {__pyx_t_5, __pyx_n_s_r, __pyx_v_r, __pyx_float_neg_1_0, __pyx_float_1_0};
    __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_7, 4+__pyx_t_7);
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2440, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+2441:     check_range('n', n, 0, None)
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_check_range); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2441, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_5 = NULL;
  __pyx_t_7 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_5)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_5);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
      __pyx_t_7 = 1;
    }
  }
  {
    PyObject *__pyx_callargs[5] = {__pyx_t_5, __pyx_n_s_n, __pyx_v_n, __pyx_int_0, Py_None};
    __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_7, 4+__pyx_t_7);
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2441, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 2442: 
+2443:     return mus_any.from_ptr(cclm.mus_make_nrxycos(frequency, ratio, n, r))
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __pyx_t_8 = __pyx_PyFloat_AsDouble(__pyx_v_ratio); if (unlikely((__pyx_t_8 == ((mus_float_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 2443, __pyx_L1_error)
  __pyx_t_7 = __Pyx_PyInt_As_int(__pyx_v_n); if (unlikely((__pyx_t_7 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 2443, __pyx_L1_error)
  __pyx_t_9 = __pyx_PyFloat_AsDouble(__pyx_v_r); if (unlikely((__pyx_t_9 == ((mus_float_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 2443, __pyx_L1_error)
  __pyx_t_1 = ((PyObject *)__pyx_vtabptr_8pysndlib_3clm_mus_any->from_ptr(mus_make_nrxycos(__pyx_v_frequency, __pyx_t_8, __pyx_t_7, __pyx_t_9), NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2443, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)__pyx_t_1);
  __pyx_t_1 = 0;
  goto __pyx_L0;
 2444: 
+2445: cpdef cython.double nrxycos(gen: mus_any, fm: Optional[float]=0.):
static PyObject *__pyx_pw_8pysndlib_3clm_245nrxycos(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static double __pyx_f_8pysndlib_3clm_nrxycos(struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen, CYTHON_UNUSED int __pyx_skip_dispatch, struct __pyx_opt_args_8pysndlib_3clm_nrxycos *__pyx_optional_args) {
  PyObject *__pyx_v_fm = ((PyObject *)__pyx_float_0_);
  double __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("nrxycos", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_fm = __pyx_optional_args->fm;
    }
  }
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("pysndlib.clm.nrxycos", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_245nrxycos(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_244nrxycos, "\n    next sample of nrxycos generator.\n    \n    :param gen: ncos gen\n    :param fm: fm input\n    :rtype: float\n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_245nrxycos = {"nrxycos", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_245nrxycos, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_244nrxycos};
static PyObject *__pyx_pw_8pysndlib_3clm_245nrxycos(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen = 0;
  PyObject *__pyx_v_fm = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("nrxycos (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_gen,&__pyx_n_s_fm,0};
    PyObject* values[2] = {0,0};
    values[1] = ((PyObject *)__pyx_float_0_);
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_gen)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 2445, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_fm);
          if (value) { values[1] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 2445, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "nrxycos") < 0)) __PYX_ERR(0, 2445, __pyx_L3_error)
      }
    } else {
      switch (__pyx_nargs) {
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_gen = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)values[0]);
    __pyx_v_fm = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("nrxycos", 0, 1, 2, __pyx_nargs); __PYX_ERR(0, 2445, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.nrxycos", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_gen), __pyx_ptype_8pysndlib_3clm_mus_any, 0, "gen", 0))) __PYX_ERR(0, 2445, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pysndlib_3clm_244nrxycos(__pyx_self, __pyx_v_gen, __pyx_v_fm);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_244nrxycos(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen, PyObject *__pyx_v_fm) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("nrxycos", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2.__pyx_n = 1;
  __pyx_t_2.fm = __pyx_v_fm;
  __pyx_t_1 = __pyx_f_8pysndlib_3clm_nrxycos(__pyx_v_gen, 0, &__pyx_t_2); if (unlikely(__pyx_t_1 == ((double)-1) && PyErr_Occurred())) __PYX_ERR(0, 2445, __pyx_L1_error)
  __pyx_t_3 = PyFloat_FromDouble(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2445, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_r = __pyx_t_3;
  __pyx_t_3 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("pysndlib.clm.nrxycos", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_codeobj__313 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__256, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_nrxycos, 2445, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__313)) __PYX_ERR(0, 2445, __pyx_L1_error)
/* … */
  __pyx_t_37 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 2445, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  if (PyDict_SetItem(__pyx_t_37, __pyx_n_s_gen, __pyx_n_s_mus_any) < 0) __PYX_ERR(0, 2445, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_37, __pyx_n_s_fm, __pyx_kp_s_Optional_float) < 0) __PYX_ERR(0, 2445, __pyx_L1_error)
  __pyx_t_41 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_245nrxycos, 0, __pyx_n_s_nrxycos, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__313)); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 2445, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_41, __pyx_tuple__314);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_41, __pyx_t_37);
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_nrxycos, __pyx_t_41) < 0) __PYX_ERR(0, 2445, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
  __pyx_tuple__314 = PyTuple_Pack(1, __pyx_float_0_); if (unlikely(!__pyx_tuple__314)) __PYX_ERR(0, 2445, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__314);
  __Pyx_GIVEREF(__pyx_tuple__314);
/* … */
struct __pyx_opt_args_8pysndlib_3clm_nrxycos {
  int __pyx_n;
  PyObject *fm;
};
 2446:     """
 2447:     next sample of nrxycos generator.
 2448:     
 2449:     :param gen: ncos gen
 2450:     :param fm: fm input
 2451:     :rtype: float
 2452:     """
+2453:     return cclm.mus_nrxycos(gen._ptr, fm)
  __pyx_t_1 = __pyx_PyFloat_AsDouble(__pyx_v_fm); if (unlikely((__pyx_t_1 == ((mus_float_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 2453, __pyx_L1_error)
  __pyx_r = mus_nrxycos(__pyx_v_gen->_ptr, __pyx_t_1);
  goto __pyx_L0;
 2454: 
+2455: cpdef bint is_nrxycos(gen: mus_any):
static PyObject *__pyx_pw_8pysndlib_3clm_247is_nrxycos(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static int __pyx_f_8pysndlib_3clm_is_nrxycos(struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen, CYTHON_UNUSED int __pyx_skip_dispatch) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_nrxycos", 0);
/* … */
  /* function exit code */
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_247is_nrxycos(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_246is_nrxycos, "\n    returns True if gen is a nrxycos.\n    \n    :param gen: gen\n    :rtype: bool\n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_247is_nrxycos = {"is_nrxycos", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_247is_nrxycos, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_246is_nrxycos};
static PyObject *__pyx_pw_8pysndlib_3clm_247is_nrxycos(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_nrxycos (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_gen,0};
    PyObject* values[1] = {0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_gen)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 2455, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "is_nrxycos") < 0)) __PYX_ERR(0, 2455, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
    }
    __pyx_v_gen = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)values[0]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("is_nrxycos", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 2455, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.is_nrxycos", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_gen), __pyx_ptype_8pysndlib_3clm_mus_any, 0, "gen", 0))) __PYX_ERR(0, 2455, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pysndlib_3clm_246is_nrxycos(__pyx_self, __pyx_v_gen);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_246is_nrxycos(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_nrxycos", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_8pysndlib_3clm_is_nrxycos(__pyx_v_gen, 0); if (unlikely(__pyx_t_1 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 2455, __pyx_L1_error)
  __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2455, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pysndlib.clm.is_nrxycos", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_41 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 2455, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  if (PyDict_SetItem(__pyx_t_41, __pyx_n_s_gen, __pyx_n_s_mus_any) < 0) __PYX_ERR(0, 2455, __pyx_L1_error)
  __pyx_t_37 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_247is_nrxycos, 0, __pyx_n_s_is_nrxycos, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__315)); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 2455, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_37, __pyx_t_41);
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_is_nrxycos, __pyx_t_37) < 0) __PYX_ERR(0, 2455, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
/* … */
  __pyx_codeobj__315 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__46, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_is_nrxycos, 2455, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__315)) __PYX_ERR(0, 2455, __pyx_L1_error)
 2456:     """
 2457:     returns True if gen is a nrxycos.
 2458:     
 2459:     :param gen: gen
 2460:     :rtype: bool
 2461:     """
+2462:     return cclm.mus_is_nrxycos(gen._ptr)
  __pyx_r = mus_is_nrxycos(__pyx_v_gen->_ptr);
  goto __pyx_L0;
 2463: 
 2464: 
 2465: # ---------------- rxykcos and rxyksin ---------------- #    
+2466: cpdef mus_any make_rxykcos(frequency: float, phase: Optional[float]=0.0, r: Optional[float]=.5, ratio: Optional[float]=1.):
static PyObject *__pyx_pw_8pysndlib_3clm_249make_rxykcos(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_f_8pysndlib_3clm_make_rxykcos(double __pyx_v_frequency, CYTHON_UNUSED int __pyx_skip_dispatch, struct __pyx_opt_args_8pysndlib_3clm_make_rxykcos *__pyx_optional_args) {
  PyObject *__pyx_v_phase = ((PyObject *)__pyx_float_0_0);
  PyObject *__pyx_v_r = ((PyObject *)__pyx_float__5);
  PyObject *__pyx_v_ratio = ((PyObject *)__pyx_float_1_);
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("make_rxykcos", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_phase = __pyx_optional_args->phase;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_r = __pyx_optional_args->r;
        if (__pyx_optional_args->__pyx_n > 2) {
          __pyx_v_ratio = __pyx_optional_args->ratio;
        }
      }
    }
  }
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_AddTraceback("pysndlib.clm.make_rxykcos", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_249make_rxykcos(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_248make_rxykcos, "\n    return a new rxykcos generator.\n    \n    :param frequency: frequency of generator\n    :param ratio: ratio between frequency and the spacing between successive sidebands\n    :param r: amplitude ratio between successive sidebands (-1.0 < r < 1.0)\n    :return: rxykcos gen\n    :rtype: mus_any\n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_249make_rxykcos = {"make_rxykcos", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_249make_rxykcos, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_248make_rxykcos};
static PyObject *__pyx_pw_8pysndlib_3clm_249make_rxykcos(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  double __pyx_v_frequency;
  PyObject *__pyx_v_phase = 0;
  PyObject *__pyx_v_r = 0;
  PyObject *__pyx_v_ratio = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("make_rxykcos (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_frequency,&__pyx_n_s_phase,&__pyx_n_s_r,&__pyx_n_s_ratio,0};
    PyObject* values[4] = {0,0,0,0};
    values[1] = ((PyObject *)__pyx_float_0_0);
    values[2] = ((PyObject *)__pyx_float__5);
    values[3] = ((PyObject *)__pyx_float_1_);
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  4: values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_frequency)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 2466, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_phase);
          if (value) { values[1] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 2466, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_r);
          if (value) { values[2] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 2466, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_ratio);
          if (value) { values[3] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 2466, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "make_rxykcos") < 0)) __PYX_ERR(0, 2466, __pyx_L3_error)
      }
    } else {
      switch (__pyx_nargs) {
        case  4: values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_frequency = __pyx_PyFloat_AsDouble(values[0]); if (unlikely((__pyx_v_frequency == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 2466, __pyx_L3_error)
    __pyx_v_phase = values[1];
    __pyx_v_r = values[2];
    __pyx_v_ratio = values[3];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("make_rxykcos", 0, 1, 4, __pyx_nargs); __PYX_ERR(0, 2466, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.make_rxykcos", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pysndlib_3clm_248make_rxykcos(__pyx_self, __pyx_v_frequency, __pyx_v_phase, __pyx_v_r, __pyx_v_ratio);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_248make_rxykcos(CYTHON_UNUSED PyObject *__pyx_self, double __pyx_v_frequency, PyObject *__pyx_v_phase, PyObject *__pyx_v_r, PyObject *__pyx_v_ratio) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("make_rxykcos", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2.__pyx_n = 3;
  __pyx_t_2.phase = __pyx_v_phase;
  __pyx_t_2.r = __pyx_v_r;
  __pyx_t_2.ratio = __pyx_v_ratio;
  __pyx_t_1 = ((PyObject *)__pyx_f_8pysndlib_3clm_make_rxykcos(__pyx_v_frequency, 0, &__pyx_t_2)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2466, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pysndlib.clm.make_rxykcos", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__316 = PyTuple_Pack(4, __pyx_n_s_frequency, __pyx_n_s_phase, __pyx_n_s_r, __pyx_n_s_ratio); if (unlikely(!__pyx_tuple__316)) __PYX_ERR(0, 2466, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__316);
  __Pyx_GIVEREF(__pyx_tuple__316);
  __pyx_codeobj__317 = (PyObject*)__Pyx_PyCode_New(4, 0, 0, 4, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__316, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_make_rxykcos, 2466, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__317)) __PYX_ERR(0, 2466, __pyx_L1_error)
/* … */
  __pyx_t_37 = __Pyx_PyDict_NewPresized(4); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 2466, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  if (PyDict_SetItem(__pyx_t_37, __pyx_n_s_frequency, __pyx_n_s_float) < 0) __PYX_ERR(0, 2466, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_37, __pyx_n_s_phase, __pyx_kp_s_Optional_float) < 0) __PYX_ERR(0, 2466, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_37, __pyx_n_s_r, __pyx_kp_s_Optional_float) < 0) __PYX_ERR(0, 2466, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_37, __pyx_n_s_ratio, __pyx_kp_s_Optional_float) < 0) __PYX_ERR(0, 2466, __pyx_L1_error)
  __pyx_t_41 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_249make_rxykcos, 0, __pyx_n_s_make_rxykcos, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__317)); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 2466, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_41, __pyx_tuple__318);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_41, __pyx_t_37);
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_make_rxykcos, __pyx_t_41) < 0) __PYX_ERR(0, 2466, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
  __pyx_tuple__318 = PyTuple_Pack(3, __pyx_float_0_0, __pyx_float__5, __pyx_float_1_); if (unlikely(!__pyx_tuple__318)) __PYX_ERR(0, 2466, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__318);
  __Pyx_GIVEREF(__pyx_tuple__318);
/* … */
struct __pyx_opt_args_8pysndlib_3clm_make_rxykcos {
  int __pyx_n;
  PyObject *phase;
  PyObject *r;
  PyObject *ratio;
};
 2467:     """
 2468:     return a new rxykcos generator.
 2469:     
 2470:     :param frequency: frequency of generator
 2471:     :param ratio: ratio between frequency and the spacing between successive sidebands
 2472:     :param r: amplitude ratio between successive sidebands (-1.0 < r < 1.0)
 2473:     :return: rxykcos gen
 2474:     :rtype: mus_any
 2475:     """
+2476:     check_range('frequency', frequency, 0.0, get_srate() / 2)
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_check_range); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2476, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = PyFloat_FromDouble(__pyx_v_frequency); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2476, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = __pyx_f_8pysndlib_3clm_get_srate(0); if (unlikely(__pyx_t_4 == ((double)-1) && PyErr_Occurred())) __PYX_ERR(0, 2476, __pyx_L1_error)
  __pyx_t_5 = PyFloat_FromDouble((__pyx_t_4 / 2.0)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2476, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_6 = NULL;
  __pyx_t_7 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_6)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_6);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
      __pyx_t_7 = 1;
    }
  }
  {
    PyObject *__pyx_callargs[5] = {__pyx_t_6, __pyx_n_s_frequency, __pyx_t_3, __pyx_float_0_0, __pyx_t_5};
    __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_7, 4+__pyx_t_7);
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2476, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+2477:     check_range('r', r, -1.0, 1.0)
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_check_range); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2477, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_5 = NULL;
  __pyx_t_7 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_5)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_5);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
      __pyx_t_7 = 1;
    }
  }
  {
    PyObject *__pyx_callargs[5] = {__pyx_t_5, __pyx_n_s_r, __pyx_v_r, __pyx_float_neg_1_0, __pyx_float_1_0};
    __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_7, 4+__pyx_t_7);
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2477, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 2478: 
+2479:     return mus_any.from_ptr(cclm.mus_make_rxykcos(frequency, phase, r, ratio))
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __pyx_t_8 = __pyx_PyFloat_AsDouble(__pyx_v_phase); if (unlikely((__pyx_t_8 == ((mus_float_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 2479, __pyx_L1_error)
  __pyx_t_9 = __pyx_PyFloat_AsDouble(__pyx_v_r); if (unlikely((__pyx_t_9 == ((mus_float_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 2479, __pyx_L1_error)
  __pyx_t_10 = __pyx_PyFloat_AsDouble(__pyx_v_ratio); if (unlikely((__pyx_t_10 == ((mus_float_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 2479, __pyx_L1_error)
  __pyx_t_1 = ((PyObject *)__pyx_vtabptr_8pysndlib_3clm_mus_any->from_ptr(mus_make_rxykcos(__pyx_v_frequency, __pyx_t_8, __pyx_t_9, __pyx_t_10), NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2479, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)__pyx_t_1);
  __pyx_t_1 = 0;
  goto __pyx_L0;
 2480: 
+2481: cpdef cython.double rxykcos(gen: mus_any, fm: Optional[float]=0.):
static PyObject *__pyx_pw_8pysndlib_3clm_251rxykcos(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static double __pyx_f_8pysndlib_3clm_rxykcos(struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen, CYTHON_UNUSED int __pyx_skip_dispatch, struct __pyx_opt_args_8pysndlib_3clm_rxykcos *__pyx_optional_args) {
  PyObject *__pyx_v_fm = ((PyObject *)__pyx_float_0_);
  double __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("rxykcos", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_fm = __pyx_optional_args->fm;
    }
  }
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("pysndlib.clm.rxykcos", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_251rxykcos(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_250rxykcos, "\n    next sample of rxykcos generator.\n    \n    :param gen: rxykcos gen\n    :param fm: fm input\n    :rtype: float\n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_251rxykcos = {"rxykcos", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_251rxykcos, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_250rxykcos};
static PyObject *__pyx_pw_8pysndlib_3clm_251rxykcos(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen = 0;
  PyObject *__pyx_v_fm = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("rxykcos (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_gen,&__pyx_n_s_fm,0};
    PyObject* values[2] = {0,0};
    values[1] = ((PyObject *)__pyx_float_0_);
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_gen)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 2481, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_fm);
          if (value) { values[1] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 2481, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "rxykcos") < 0)) __PYX_ERR(0, 2481, __pyx_L3_error)
      }
    } else {
      switch (__pyx_nargs) {
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_gen = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)values[0]);
    __pyx_v_fm = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("rxykcos", 0, 1, 2, __pyx_nargs); __PYX_ERR(0, 2481, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.rxykcos", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_gen), __pyx_ptype_8pysndlib_3clm_mus_any, 0, "gen", 0))) __PYX_ERR(0, 2481, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pysndlib_3clm_250rxykcos(__pyx_self, __pyx_v_gen, __pyx_v_fm);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_250rxykcos(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen, PyObject *__pyx_v_fm) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("rxykcos", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2.__pyx_n = 1;
  __pyx_t_2.fm = __pyx_v_fm;
  __pyx_t_1 = __pyx_f_8pysndlib_3clm_rxykcos(__pyx_v_gen, 0, &__pyx_t_2); if (unlikely(__pyx_t_1 == ((double)-1) && PyErr_Occurred())) __PYX_ERR(0, 2481, __pyx_L1_error)
  __pyx_t_3 = PyFloat_FromDouble(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2481, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_r = __pyx_t_3;
  __pyx_t_3 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("pysndlib.clm.rxykcos", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_codeobj__319 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__256, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_rxykcos, 2481, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__319)) __PYX_ERR(0, 2481, __pyx_L1_error)
/* … */
  __pyx_t_41 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 2481, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  if (PyDict_SetItem(__pyx_t_41, __pyx_n_s_gen, __pyx_n_s_mus_any) < 0) __PYX_ERR(0, 2481, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_41, __pyx_n_s_fm, __pyx_kp_s_Optional_float) < 0) __PYX_ERR(0, 2481, __pyx_L1_error)
  __pyx_t_37 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_251rxykcos, 0, __pyx_n_s_rxykcos, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__319)); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 2481, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_37, __pyx_tuple__320);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_37, __pyx_t_41);
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_rxykcos, __pyx_t_37) < 0) __PYX_ERR(0, 2481, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
  __pyx_tuple__320 = PyTuple_Pack(1, __pyx_float_0_); if (unlikely(!__pyx_tuple__320)) __PYX_ERR(0, 2481, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__320);
  __Pyx_GIVEREF(__pyx_tuple__320);
/* … */
struct __pyx_opt_args_8pysndlib_3clm_rxykcos {
  int __pyx_n;
  PyObject *fm;
};
 2482:     """
 2483:     next sample of rxykcos generator.
 2484:     
 2485:     :param gen: rxykcos gen
 2486:     :param fm: fm input
 2487:     :rtype: float
 2488:     """
+2489:     return cclm.mus_rxykcos(gen._ptr, fm)
  __pyx_t_1 = __pyx_PyFloat_AsDouble(__pyx_v_fm); if (unlikely((__pyx_t_1 == ((mus_float_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 2489, __pyx_L1_error)
  __pyx_r = mus_rxykcos(__pyx_v_gen->_ptr, __pyx_t_1);
  goto __pyx_L0;
 2490: 
+2491: cpdef bint is_rxykcos(gen: mus_any):
static PyObject *__pyx_pw_8pysndlib_3clm_253is_rxykcos(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static int __pyx_f_8pysndlib_3clm_is_rxykcos(struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen, CYTHON_UNUSED int __pyx_skip_dispatch) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_rxykcos", 0);
/* … */
  /* function exit code */
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_253is_rxykcos(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_252is_rxykcos, "\n    returns True if gen is a rxykcos.\n    \n    :param gen: gen\n    :rtype: bool\n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_253is_rxykcos = {"is_rxykcos", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_253is_rxykcos, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_252is_rxykcos};
static PyObject *__pyx_pw_8pysndlib_3clm_253is_rxykcos(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_rxykcos (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_gen,0};
    PyObject* values[1] = {0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_gen)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 2491, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "is_rxykcos") < 0)) __PYX_ERR(0, 2491, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
    }
    __pyx_v_gen = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)values[0]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("is_rxykcos", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 2491, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.is_rxykcos", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_gen), __pyx_ptype_8pysndlib_3clm_mus_any, 0, "gen", 0))) __PYX_ERR(0, 2491, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pysndlib_3clm_252is_rxykcos(__pyx_self, __pyx_v_gen);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_252is_rxykcos(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_rxykcos", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_8pysndlib_3clm_is_rxykcos(__pyx_v_gen, 0); if (unlikely(__pyx_t_1 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 2491, __pyx_L1_error)
  __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2491, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pysndlib.clm.is_rxykcos", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_37 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 2491, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  if (PyDict_SetItem(__pyx_t_37, __pyx_n_s_gen, __pyx_n_s_mus_any) < 0) __PYX_ERR(0, 2491, __pyx_L1_error)
  __pyx_t_41 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_253is_rxykcos, 0, __pyx_n_s_is_rxykcos, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__321)); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 2491, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_41, __pyx_t_37);
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_is_rxykcos, __pyx_t_41) < 0) __PYX_ERR(0, 2491, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
/* … */
  __pyx_codeobj__321 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__46, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_is_rxykcos, 2491, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__321)) __PYX_ERR(0, 2491, __pyx_L1_error)
 2492:     """
 2493:     returns True if gen is a rxykcos.
 2494:     
 2495:     :param gen: gen
 2496:     :rtype: bool
 2497:     """
+2498:     return cclm.mus_is_rxykcos(gen._ptr)
  __pyx_r = mus_is_rxykcos(__pyx_v_gen->_ptr);
  goto __pyx_L0;
 2499: 
+2500: cpdef mus_any make_rxyksin(frequency: float, phase: cython.double, r: Optional[float]=.5, ratio: Optional[float]=1.):
static PyObject *__pyx_pw_8pysndlib_3clm_255make_rxyksin(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_f_8pysndlib_3clm_make_rxyksin(double __pyx_v_frequency, double __pyx_v_phase, CYTHON_UNUSED int __pyx_skip_dispatch, struct __pyx_opt_args_8pysndlib_3clm_make_rxyksin *__pyx_optional_args) {
  PyObject *__pyx_v_r = ((PyObject *)__pyx_float__5);
  PyObject *__pyx_v_ratio = ((PyObject *)__pyx_float_1_);
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("make_rxyksin", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_r = __pyx_optional_args->r;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_ratio = __pyx_optional_args->ratio;
      }
    }
  }
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_AddTraceback("pysndlib.clm.make_rxyksin", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_255make_rxyksin(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_254make_rxyksin, "\n    return a new rxyksin generator.\n    \n    :param frequency: frequency of generator\n    :param ratio: ratio between frequency and the spacing between successive sidebands\n    :param r: amplitude ratio between successive sidebands (-1.0 < r < 1.0)\n    :return: rxyksin gen\n    :rtype: mus_any\n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_255make_rxyksin = {"make_rxyksin", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_255make_rxyksin, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_254make_rxyksin};
static PyObject *__pyx_pw_8pysndlib_3clm_255make_rxyksin(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  double __pyx_v_frequency;
  double __pyx_v_phase;
  PyObject *__pyx_v_r = 0;
  PyObject *__pyx_v_ratio = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("make_rxyksin (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_frequency,&__pyx_n_s_phase,&__pyx_n_s_r,&__pyx_n_s_ratio,0};
    PyObject* values[4] = {0,0,0,0};
    values[2] = ((PyObject *)__pyx_float__5);
    values[3] = ((PyObject *)__pyx_float_1_);
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  4: values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_frequency)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 2500, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_phase)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 2500, __pyx_L3_error)
        else {
          __Pyx_RaiseArgtupleInvalid("make_rxyksin", 0, 2, 4, 1); __PYX_ERR(0, 2500, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_r);
          if (value) { values[2] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 2500, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_ratio);
          if (value) { values[3] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 2500, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "make_rxyksin") < 0)) __PYX_ERR(0, 2500, __pyx_L3_error)
      }
    } else {
      switch (__pyx_nargs) {
        case  4: values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_frequency = __pyx_PyFloat_AsDouble(values[0]); if (unlikely((__pyx_v_frequency == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 2500, __pyx_L3_error)
    __pyx_v_phase = __pyx_PyFloat_AsDouble(values[1]); if (unlikely((__pyx_v_phase == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 2500, __pyx_L3_error)
    __pyx_v_r = values[2];
    __pyx_v_ratio = values[3];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("make_rxyksin", 0, 2, 4, __pyx_nargs); __PYX_ERR(0, 2500, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.make_rxyksin", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pysndlib_3clm_254make_rxyksin(__pyx_self, __pyx_v_frequency, __pyx_v_phase, __pyx_v_r, __pyx_v_ratio);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_254make_rxyksin(CYTHON_UNUSED PyObject *__pyx_self, double __pyx_v_frequency, double __pyx_v_phase, PyObject *__pyx_v_r, PyObject *__pyx_v_ratio) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("make_rxyksin", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2.__pyx_n = 2;
  __pyx_t_2.r = __pyx_v_r;
  __pyx_t_2.ratio = __pyx_v_ratio;
  __pyx_t_1 = ((PyObject *)__pyx_f_8pysndlib_3clm_make_rxyksin(__pyx_v_frequency, __pyx_v_phase, 0, &__pyx_t_2)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2500, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pysndlib.clm.make_rxyksin", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_codeobj__322 = (PyObject*)__Pyx_PyCode_New(4, 0, 0, 4, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__316, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_make_rxyksin, 2500, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__322)) __PYX_ERR(0, 2500, __pyx_L1_error)
/* … */
  __pyx_t_41 = __Pyx_PyDict_NewPresized(4); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 2500, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  if (PyDict_SetItem(__pyx_t_41, __pyx_n_s_frequency, __pyx_n_s_float) < 0) __PYX_ERR(0, 2500, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_41, __pyx_n_s_phase, __pyx_kp_s_cython_double) < 0) __PYX_ERR(0, 2500, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_41, __pyx_n_s_r, __pyx_kp_s_Optional_float) < 0) __PYX_ERR(0, 2500, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_41, __pyx_n_s_ratio, __pyx_kp_s_Optional_float) < 0) __PYX_ERR(0, 2500, __pyx_L1_error)
  __pyx_t_37 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_255make_rxyksin, 0, __pyx_n_s_make_rxyksin, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__322)); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 2500, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_37, __pyx_tuple__323);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_37, __pyx_t_41);
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_make_rxyksin, __pyx_t_37) < 0) __PYX_ERR(0, 2500, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
  __pyx_tuple__323 = PyTuple_Pack(2, __pyx_float__5, __pyx_float_1_); if (unlikely(!__pyx_tuple__323)) __PYX_ERR(0, 2500, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__323);
  __Pyx_GIVEREF(__pyx_tuple__323);
/* … */
struct __pyx_opt_args_8pysndlib_3clm_make_rxyksin {
  int __pyx_n;
  PyObject *r;
  PyObject *ratio;
};
 2501:     """
 2502:     return a new rxyksin generator.
 2503:     
 2504:     :param frequency: frequency of generator
 2505:     :param ratio: ratio between frequency and the spacing between successive sidebands
 2506:     :param r: amplitude ratio between successive sidebands (-1.0 < r < 1.0)
 2507:     :return: rxyksin gen
 2508:     :rtype: mus_any
 2509:     """
+2510:     check_range('frequency', frequency, 0.0, get_srate() / 2)
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_check_range); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2510, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = PyFloat_FromDouble(__pyx_v_frequency); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2510, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = __pyx_f_8pysndlib_3clm_get_srate(0); if (unlikely(__pyx_t_4 == ((double)-1) && PyErr_Occurred())) __PYX_ERR(0, 2510, __pyx_L1_error)
  __pyx_t_5 = PyFloat_FromDouble((__pyx_t_4 / 2.0)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2510, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_6 = NULL;
  __pyx_t_7 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_6)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_6);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
      __pyx_t_7 = 1;
    }
  }
  {
    PyObject *__pyx_callargs[5] = {__pyx_t_6, __pyx_n_s_frequency, __pyx_t_3, __pyx_float_0_0, __pyx_t_5};
    __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_7, 4+__pyx_t_7);
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2510, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+2511:     check_range('r', r, -1.0, 1.0)
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_check_range); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2511, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_5 = NULL;
  __pyx_t_7 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_5)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_5);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
      __pyx_t_7 = 1;
    }
  }
  {
    PyObject *__pyx_callargs[5] = {__pyx_t_5, __pyx_n_s_r, __pyx_v_r, __pyx_float_neg_1_0, __pyx_float_1_0};
    __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_7, 4+__pyx_t_7);
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2511, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 2512: 
+2513:     return mus_any.from_ptr(cclm.mus_make_rxyksin(frequency, phase, r, ratio))
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __pyx_t_8 = __pyx_PyFloat_AsDouble(__pyx_v_r); if (unlikely((__pyx_t_8 == ((mus_float_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 2513, __pyx_L1_error)
  __pyx_t_9 = __pyx_PyFloat_AsDouble(__pyx_v_ratio); if (unlikely((__pyx_t_9 == ((mus_float_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 2513, __pyx_L1_error)
  __pyx_t_1 = ((PyObject *)__pyx_vtabptr_8pysndlib_3clm_mus_any->from_ptr(mus_make_rxyksin(__pyx_v_frequency, __pyx_v_phase, __pyx_t_8, __pyx_t_9), NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2513, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)__pyx_t_1);
  __pyx_t_1 = 0;
  goto __pyx_L0;
 2514: 
+2515: cpdef cython.double rxyksin(gen:  mus_any, fm: Optional[float]=0.):
static PyObject *__pyx_pw_8pysndlib_3clm_257rxyksin(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static double __pyx_f_8pysndlib_3clm_rxyksin(struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen, CYTHON_UNUSED int __pyx_skip_dispatch, struct __pyx_opt_args_8pysndlib_3clm_rxyksin *__pyx_optional_args) {
  PyObject *__pyx_v_fm = ((PyObject *)__pyx_float_0_);
  double __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("rxyksin", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_fm = __pyx_optional_args->fm;
    }
  }
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("pysndlib.clm.rxyksin", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_257rxyksin(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_256rxyksin, "\n    next sample of rxyksin generator.\n    \n    :param gen: rxyksin gen\n    :param fm: fm input\n    :rtype: float\n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_257rxyksin = {"rxyksin", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_257rxyksin, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_256rxyksin};
static PyObject *__pyx_pw_8pysndlib_3clm_257rxyksin(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen = 0;
  PyObject *__pyx_v_fm = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("rxyksin (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_gen,&__pyx_n_s_fm,0};
    PyObject* values[2] = {0,0};
    values[1] = ((PyObject *)__pyx_float_0_);
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_gen)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 2515, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_fm);
          if (value) { values[1] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 2515, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "rxyksin") < 0)) __PYX_ERR(0, 2515, __pyx_L3_error)
      }
    } else {
      switch (__pyx_nargs) {
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_gen = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)values[0]);
    __pyx_v_fm = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("rxyksin", 0, 1, 2, __pyx_nargs); __PYX_ERR(0, 2515, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.rxyksin", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_gen), __pyx_ptype_8pysndlib_3clm_mus_any, 0, "gen", 0))) __PYX_ERR(0, 2515, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pysndlib_3clm_256rxyksin(__pyx_self, __pyx_v_gen, __pyx_v_fm);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_256rxyksin(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen, PyObject *__pyx_v_fm) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("rxyksin", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2.__pyx_n = 1;
  __pyx_t_2.fm = __pyx_v_fm;
  __pyx_t_1 = __pyx_f_8pysndlib_3clm_rxyksin(__pyx_v_gen, 0, &__pyx_t_2); if (unlikely(__pyx_t_1 == ((double)-1) && PyErr_Occurred())) __PYX_ERR(0, 2515, __pyx_L1_error)
  __pyx_t_3 = PyFloat_FromDouble(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2515, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_r = __pyx_t_3;
  __pyx_t_3 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("pysndlib.clm.rxyksin", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_codeobj__324 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__256, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_rxyksin, 2515, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__324)) __PYX_ERR(0, 2515, __pyx_L1_error)
/* … */
  __pyx_t_37 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 2515, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  if (PyDict_SetItem(__pyx_t_37, __pyx_n_s_gen, __pyx_n_s_mus_any) < 0) __PYX_ERR(0, 2515, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_37, __pyx_n_s_fm, __pyx_kp_s_Optional_float) < 0) __PYX_ERR(0, 2515, __pyx_L1_error)
  __pyx_t_41 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_257rxyksin, 0, __pyx_n_s_rxyksin, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__324)); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 2515, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_41, __pyx_tuple__325);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_41, __pyx_t_37);
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_rxyksin, __pyx_t_41) < 0) __PYX_ERR(0, 2515, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
  __pyx_tuple__325 = PyTuple_Pack(1, __pyx_float_0_); if (unlikely(!__pyx_tuple__325)) __PYX_ERR(0, 2515, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__325);
  __Pyx_GIVEREF(__pyx_tuple__325);
/* … */
struct __pyx_opt_args_8pysndlib_3clm_rxyksin {
  int __pyx_n;
  PyObject *fm;
};
 2516:     """
 2517:     next sample of rxyksin generator.
 2518:     
 2519:     :param gen: rxyksin gen
 2520:     :param fm: fm input
 2521:     :rtype: float
 2522:     """
+2523:     return cclm.mus_rxyksin(gen._ptr, fm)
  __pyx_t_1 = __pyx_PyFloat_AsDouble(__pyx_v_fm); if (unlikely((__pyx_t_1 == ((mus_float_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 2523, __pyx_L1_error)
  __pyx_r = mus_rxyksin(__pyx_v_gen->_ptr, __pyx_t_1);
  goto __pyx_L0;
 2524: 
+2525: cpdef bint  is_rxyksin(gen: mus_any):
static PyObject *__pyx_pw_8pysndlib_3clm_259is_rxyksin(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static int __pyx_f_8pysndlib_3clm_is_rxyksin(struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen, CYTHON_UNUSED int __pyx_skip_dispatch) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_rxyksin", 0);
/* … */
  /* function exit code */
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_259is_rxyksin(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_258is_rxyksin, "\n    returns True if gen is a rxyksin.\n    \n    :param gen: gen\n    :rtype: bool\n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_259is_rxyksin = {"is_rxyksin", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_259is_rxyksin, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_258is_rxyksin};
static PyObject *__pyx_pw_8pysndlib_3clm_259is_rxyksin(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_rxyksin (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_gen,0};
    PyObject* values[1] = {0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_gen)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 2525, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "is_rxyksin") < 0)) __PYX_ERR(0, 2525, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
    }
    __pyx_v_gen = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)values[0]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("is_rxyksin", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 2525, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.is_rxyksin", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_gen), __pyx_ptype_8pysndlib_3clm_mus_any, 0, "gen", 0))) __PYX_ERR(0, 2525, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pysndlib_3clm_258is_rxyksin(__pyx_self, __pyx_v_gen);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_258is_rxyksin(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_rxyksin", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_8pysndlib_3clm_is_rxyksin(__pyx_v_gen, 0); if (unlikely(__pyx_t_1 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 2525, __pyx_L1_error)
  __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2525, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pysndlib.clm.is_rxyksin", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_41 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 2525, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  if (PyDict_SetItem(__pyx_t_41, __pyx_n_s_gen, __pyx_n_s_mus_any) < 0) __PYX_ERR(0, 2525, __pyx_L1_error)
  __pyx_t_37 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_259is_rxyksin, 0, __pyx_n_s_is_rxyksin, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__326)); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 2525, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_37, __pyx_t_41);
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_is_rxyksin, __pyx_t_37) < 0) __PYX_ERR(0, 2525, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
/* … */
  __pyx_codeobj__326 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__46, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_is_rxyksin, 2525, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__326)) __PYX_ERR(0, 2525, __pyx_L1_error)
 2526:     """
 2527:     returns True if gen is a rxyksin.
 2528:     
 2529:     :param gen: gen
 2530:     :rtype: bool
 2531:     """
+2532:     return cclm.mus_is_rxyksin(gen._ptr)
  __pyx_r = mus_is_rxyksin(__pyx_v_gen->_ptr);
  goto __pyx_L0;
 2533: 
 2534: # ---------------- ssb-am ---------------- #    
+2535: cpdef mus_any make_ssb_am(frequency: float, order: Optional[int]=40):
static PyObject *__pyx_pw_8pysndlib_3clm_261make_ssb_am(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_f_8pysndlib_3clm_make_ssb_am(double __pyx_v_frequency, CYTHON_UNUSED int __pyx_skip_dispatch, struct __pyx_opt_args_8pysndlib_3clm_make_ssb_am *__pyx_optional_args) {
  PyObject *__pyx_v_order = ((PyObject *)__pyx_int_40);
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("make_ssb_am", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_order = __pyx_optional_args->order;
    }
  }
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_AddTraceback("pysndlib.clm.make_ssb_am", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_261make_ssb_am(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_260make_ssb_am, "\n    return a new ssb_am generator.\n    \n    :param frequency: frequency of generator\n    :param order: embedded delay line size\n    :return: ssb_am gen\n    :rtype: mus_any\n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_261make_ssb_am = {"make_ssb_am", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_261make_ssb_am, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_260make_ssb_am};
static PyObject *__pyx_pw_8pysndlib_3clm_261make_ssb_am(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  double __pyx_v_frequency;
  PyObject *__pyx_v_order = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("make_ssb_am (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_frequency,&__pyx_n_s_order,0};
    PyObject* values[2] = {0,0};
    values[1] = ((PyObject *)__pyx_int_40);
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_frequency)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 2535, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_order);
          if (value) { values[1] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 2535, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "make_ssb_am") < 0)) __PYX_ERR(0, 2535, __pyx_L3_error)
      }
    } else {
      switch (__pyx_nargs) {
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_frequency = __pyx_PyFloat_AsDouble(values[0]); if (unlikely((__pyx_v_frequency == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 2535, __pyx_L3_error)
    __pyx_v_order = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("make_ssb_am", 0, 1, 2, __pyx_nargs); __PYX_ERR(0, 2535, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.make_ssb_am", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pysndlib_3clm_260make_ssb_am(__pyx_self, __pyx_v_frequency, __pyx_v_order);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_260make_ssb_am(CYTHON_UNUSED PyObject *__pyx_self, double __pyx_v_frequency, PyObject *__pyx_v_order) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("make_ssb_am", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2.__pyx_n = 1;
  __pyx_t_2.order = __pyx_v_order;
  __pyx_t_1 = ((PyObject *)__pyx_f_8pysndlib_3clm_make_ssb_am(__pyx_v_frequency, 0, &__pyx_t_2)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2535, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pysndlib.clm.make_ssb_am", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__327 = PyTuple_Pack(2, __pyx_n_s_frequency, __pyx_n_s_order); if (unlikely(!__pyx_tuple__327)) __PYX_ERR(0, 2535, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__327);
  __Pyx_GIVEREF(__pyx_tuple__327);
  __pyx_codeobj__328 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__327, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_make_ssb_am, 2535, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__328)) __PYX_ERR(0, 2535, __pyx_L1_error)
/* … */
  __pyx_t_37 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 2535, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  if (PyDict_SetItem(__pyx_t_37, __pyx_n_s_frequency, __pyx_n_s_float) < 0) __PYX_ERR(0, 2535, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_37, __pyx_n_s_order, __pyx_kp_s_Optional_int) < 0) __PYX_ERR(0, 2535, __pyx_L1_error)
  __pyx_t_41 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_261make_ssb_am, 0, __pyx_n_s_make_ssb_am, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__328)); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 2535, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_41, __pyx_tuple__329);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_41, __pyx_t_37);
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_make_ssb_am, __pyx_t_41) < 0) __PYX_ERR(0, 2535, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
  __pyx_tuple__329 = PyTuple_Pack(1, __pyx_int_40); if (unlikely(!__pyx_tuple__329)) __PYX_ERR(0, 2535, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__329);
  __Pyx_GIVEREF(__pyx_tuple__329);
/* … */
struct __pyx_opt_args_8pysndlib_3clm_make_ssb_am {
  int __pyx_n;
  PyObject *order;
};
 2536:     """
 2537:     return a new ssb_am generator.
 2538:     
 2539:     :param frequency: frequency of generator
 2540:     :param order: embedded delay line size
 2541:     :return: ssb_am gen
 2542:     :rtype: mus_any
 2543:     """
+2544:     check_range('frequency', frequency, 0.0, get_srate() / 2)
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_check_range); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2544, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = PyFloat_FromDouble(__pyx_v_frequency); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2544, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = __pyx_f_8pysndlib_3clm_get_srate(0); if (unlikely(__pyx_t_4 == ((double)-1) && PyErr_Occurred())) __PYX_ERR(0, 2544, __pyx_L1_error)
  __pyx_t_5 = PyFloat_FromDouble((__pyx_t_4 / 2.0)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2544, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_6 = NULL;
  __pyx_t_7 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_6)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_6);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
      __pyx_t_7 = 1;
    }
  }
  {
    PyObject *__pyx_callargs[5] = {__pyx_t_6, __pyx_n_s_frequency, __pyx_t_3, __pyx_float_0_0, __pyx_t_5};
    __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_7, 4+__pyx_t_7);
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2544, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 2545: 
+2546:     return mus_any.from_ptr(cclm.mus_make_ssb_am(frequency, order))
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __pyx_t_7 = __Pyx_PyInt_As_int(__pyx_v_order); if (unlikely((__pyx_t_7 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 2546, __pyx_L1_error)
  __pyx_t_1 = ((PyObject *)__pyx_vtabptr_8pysndlib_3clm_mus_any->from_ptr(mus_make_ssb_am(__pyx_v_frequency, __pyx_t_7), NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2546, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)__pyx_t_1);
  __pyx_t_1 = 0;
  goto __pyx_L0;
 2547: 
+2548: cpdef cython.double ssb_am(gen: mus_any, insig: float, fm: Optional[float]=None):
static PyObject *__pyx_pw_8pysndlib_3clm_263ssb_am(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static double __pyx_f_8pysndlib_3clm_ssb_am(struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen, double __pyx_v_insig, CYTHON_UNUSED int __pyx_skip_dispatch, struct __pyx_opt_args_8pysndlib_3clm_ssb_am *__pyx_optional_args) {
  PyObject *__pyx_v_fm = ((PyObject *)Py_None);
  double __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("ssb_am", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_fm = __pyx_optional_args->fm;
    }
  }
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("pysndlib.clm.ssb_am", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_263ssb_am(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_262ssb_am, "\n    get the next sample from ssb_am generator.\n    \n    :param gen: ssb_am gen\n    :param fm: fm input\n    :rtype: float\n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_263ssb_am = {"ssb_am", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_263ssb_am, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_262ssb_am};
static PyObject *__pyx_pw_8pysndlib_3clm_263ssb_am(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen = 0;
  double __pyx_v_insig;
  PyObject *__pyx_v_fm = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("ssb_am (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_gen,&__pyx_n_s_insig,&__pyx_n_s_fm,0};
    PyObject* values[3] = {0,0,0};
    values[2] = ((PyObject *)Py_None);
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_gen)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 2548, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_insig)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 2548, __pyx_L3_error)
        else {
          __Pyx_RaiseArgtupleInvalid("ssb_am", 0, 2, 3, 1); __PYX_ERR(0, 2548, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_fm);
          if (value) { values[2] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 2548, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "ssb_am") < 0)) __PYX_ERR(0, 2548, __pyx_L3_error)
      }
    } else {
      switch (__pyx_nargs) {
        case  3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_gen = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)values[0]);
    __pyx_v_insig = __pyx_PyFloat_AsDouble(values[1]); if (unlikely((__pyx_v_insig == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 2548, __pyx_L3_error)
    __pyx_v_fm = values[2];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("ssb_am", 0, 2, 3, __pyx_nargs); __PYX_ERR(0, 2548, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.ssb_am", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_gen), __pyx_ptype_8pysndlib_3clm_mus_any, 0, "gen", 0))) __PYX_ERR(0, 2548, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pysndlib_3clm_262ssb_am(__pyx_self, __pyx_v_gen, __pyx_v_insig, __pyx_v_fm);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_262ssb_am(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen, double __pyx_v_insig, PyObject *__pyx_v_fm) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("ssb_am", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2.__pyx_n = 1;
  __pyx_t_2.fm = __pyx_v_fm;
  __pyx_t_1 = __pyx_f_8pysndlib_3clm_ssb_am(__pyx_v_gen, __pyx_v_insig, 0, &__pyx_t_2); if (unlikely(__pyx_t_1 == ((double)-1) && PyErr_Occurred())) __PYX_ERR(0, 2548, __pyx_L1_error)
  __pyx_t_3 = PyFloat_FromDouble(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2548, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_r = __pyx_t_3;
  __pyx_t_3 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("pysndlib.clm.ssb_am", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__330 = PyTuple_Pack(3, __pyx_n_s_gen, __pyx_n_s_insig, __pyx_n_s_fm); if (unlikely(!__pyx_tuple__330)) __PYX_ERR(0, 2548, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__330);
  __Pyx_GIVEREF(__pyx_tuple__330);
/* … */
  __pyx_t_41 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 2548, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  if (PyDict_SetItem(__pyx_t_41, __pyx_n_s_gen, __pyx_n_s_mus_any) < 0) __PYX_ERR(0, 2548, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_41, __pyx_n_s_insig, __pyx_n_s_float) < 0) __PYX_ERR(0, 2548, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_41, __pyx_n_s_fm, __pyx_kp_s_Optional_float) < 0) __PYX_ERR(0, 2548, __pyx_L1_error)
  __pyx_t_37 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_263ssb_am, 0, __pyx_n_s_ssb_am, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__331)); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 2548, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_37, __pyx_tuple__258);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_37, __pyx_t_41);
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_ssb_am, __pyx_t_37) < 0) __PYX_ERR(0, 2548, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
  __pyx_codeobj__331 = (PyObject*)__Pyx_PyCode_New(3, 0, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__330, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_ssb_am, 2548, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__331)) __PYX_ERR(0, 2548, __pyx_L1_error)
/* … */
struct __pyx_opt_args_8pysndlib_3clm_ssb_am {
  int __pyx_n;
  PyObject *fm;
};
 2549:     """
 2550:     get the next sample from ssb_am generator.
 2551:     
 2552:     :param gen: ssb_am gen
 2553:     :param fm: fm input
 2554:     :rtype: float
 2555:     """
+2556:     if(fm):
  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_fm); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 2556, __pyx_L1_error)
  if (__pyx_t_1) {
/* … */
  }
+2557:         return cclm.mus_ssb_am(gen._ptr, insig, fm)
    __pyx_t_2 = __pyx_PyFloat_AsDouble(__pyx_v_fm); if (unlikely((__pyx_t_2 == ((mus_float_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 2557, __pyx_L1_error)
    __pyx_r = mus_ssb_am(__pyx_v_gen->_ptr, __pyx_v_insig, __pyx_t_2);
    goto __pyx_L0;
 2558:     else:
+2559:         return cclm.mus_ssb_am_unmodulated(gen._ptr, insig)
  /*else*/ {
    __pyx_r = mus_ssb_am_unmodulated(__pyx_v_gen->_ptr, __pyx_v_insig);
    goto __pyx_L0;
  }
 2560: 
+2561: cpdef bint is_ssb_am(gen: mus_any):
static PyObject *__pyx_pw_8pysndlib_3clm_265is_ssb_am(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static int __pyx_f_8pysndlib_3clm_is_ssb_am(struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen, CYTHON_UNUSED int __pyx_skip_dispatch) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_ssb_am", 0);
/* … */
  /* function exit code */
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_265is_ssb_am(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_264is_ssb_am, "\n    returns True if gen is a ssb_am.\n    \n    :param gen: gen\n    :rtype: bool\n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_265is_ssb_am = {"is_ssb_am", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_265is_ssb_am, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_264is_ssb_am};
static PyObject *__pyx_pw_8pysndlib_3clm_265is_ssb_am(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_ssb_am (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_gen,0};
    PyObject* values[1] = {0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_gen)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 2561, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "is_ssb_am") < 0)) __PYX_ERR(0, 2561, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
    }
    __pyx_v_gen = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)values[0]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("is_ssb_am", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 2561, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.is_ssb_am", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_gen), __pyx_ptype_8pysndlib_3clm_mus_any, 0, "gen", 0))) __PYX_ERR(0, 2561, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pysndlib_3clm_264is_ssb_am(__pyx_self, __pyx_v_gen);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_264is_ssb_am(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_ssb_am", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_8pysndlib_3clm_is_ssb_am(__pyx_v_gen, 0); if (unlikely(__pyx_t_1 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 2561, __pyx_L1_error)
  __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2561, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pysndlib.clm.is_ssb_am", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_37 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 2561, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  if (PyDict_SetItem(__pyx_t_37, __pyx_n_s_gen, __pyx_n_s_mus_any) < 0) __PYX_ERR(0, 2561, __pyx_L1_error)
  __pyx_t_41 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_265is_ssb_am, 0, __pyx_n_s_is_ssb_am, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__332)); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 2561, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_41, __pyx_t_37);
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_is_ssb_am, __pyx_t_41) < 0) __PYX_ERR(0, 2561, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
/* … */
  __pyx_codeobj__332 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__46, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_is_ssb_am, 2561, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__332)) __PYX_ERR(0, 2561, __pyx_L1_error)
 2562:     """
 2563:     returns True if gen is a ssb_am.
 2564:     
 2565:     :param gen: gen
 2566:     :rtype: bool
 2567:     """
+2568:     return cclm.mus_is_ssb_am(gen._ptr)
  __pyx_r = mus_is_ssb_am(__pyx_v_gen->_ptr);
  goto __pyx_L0;
 2569: 
 2570: 
 2571: 
 2572: # ---------------- wave-train ----------------#
+2573: cpdef mus_any make_wave_train(frequency: float, wave: npt.NDArray[np.float64], initial_phase: Optional[float]=0., interp_type=Interp.LINEAR):
static PyObject *__pyx_pw_8pysndlib_3clm_267make_wave_train(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_f_8pysndlib_3clm_make_wave_train(double __pyx_v_frequency, PyObject *__pyx_v_wave, CYTHON_UNUSED int __pyx_skip_dispatch, struct __pyx_opt_args_8pysndlib_3clm_make_wave_train *__pyx_optional_args) {
  PyObject *__pyx_v_initial_phase = ((PyObject *)__pyx_float_0_);
  PyObject *__pyx_v_interp_type = __pyx_k__28;
  __Pyx_memviewslice __pyx_v_wave_view = { 0, 0, { 0 }, { 0 }, { 0 } };
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen = NULL;
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("make_wave_train", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_initial_phase = __pyx_optional_args->initial_phase;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_interp_type = __pyx_optional_args->interp_type;
      }
    }
  }
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __PYX_XCLEAR_MEMVIEW(&__pyx_t_8, 1);
  __Pyx_AddTraceback("pysndlib.clm.make_wave_train", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __PYX_XCLEAR_MEMVIEW(&__pyx_v_wave_view, 1);
  __Pyx_XDECREF((PyObject *)__pyx_v_gen);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_267make_wave_train(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_266make_wave_train, "\n    return a new wave-train generator (an extension of pulse-train). frequency is the repetition rate\n    of the wave found \\in wave. successive waves can overlap.\n    \n    :param frequency: frequency of gen \\in hz\n    :param wave: np.ndarray if provided is waveform\n    :param initial_phase: initial phase of gen \\in radians\n    :param interp_type: type of interpolation used\n    :return: wave_train gen\n    :rtype: mus_any\n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_267make_wave_train = {"make_wave_train", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_267make_wave_train, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_266make_wave_train};
static PyObject *__pyx_pw_8pysndlib_3clm_267make_wave_train(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  double __pyx_v_frequency;
  PyObject *__pyx_v_wave = 0;
  PyObject *__pyx_v_initial_phase = 0;
  PyObject *__pyx_v_interp_type = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("make_wave_train (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_frequency,&__pyx_n_s_wave,&__pyx_n_s_initial_phase,&__pyx_n_s_interp_type,0};
    PyObject* values[4] = {0,0,0,0};
    values[2] = ((PyObject *)__pyx_float_0_);
    values[3] = __pyx_k__28;
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  4: values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_frequency)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 2573, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_wave)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 2573, __pyx_L3_error)
        else {
          __Pyx_RaiseArgtupleInvalid("make_wave_train", 0, 2, 4, 1); __PYX_ERR(0, 2573, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_initial_phase);
          if (value) { values[2] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 2573, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_interp_type);
          if (value) { values[3] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 2573, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "make_wave_train") < 0)) __PYX_ERR(0, 2573, __pyx_L3_error)
      }
    } else {
      switch (__pyx_nargs) {
        case  4: values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_frequency = __pyx_PyFloat_AsDouble(values[0]); if (unlikely((__pyx_v_frequency == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 2573, __pyx_L3_error)
    __pyx_v_wave = values[1];
    __pyx_v_initial_phase = values[2];
    __pyx_v_interp_type = values[3];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("make_wave_train", 0, 2, 4, __pyx_nargs); __PYX_ERR(0, 2573, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.make_wave_train", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pysndlib_3clm_266make_wave_train(__pyx_self, __pyx_v_frequency, __pyx_v_wave, __pyx_v_initial_phase, __pyx_v_interp_type);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_266make_wave_train(CYTHON_UNUSED PyObject *__pyx_self, double __pyx_v_frequency, PyObject *__pyx_v_wave, PyObject *__pyx_v_initial_phase, PyObject *__pyx_v_interp_type) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("make_wave_train", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2.__pyx_n = 2;
  __pyx_t_2.initial_phase = __pyx_v_initial_phase;
  __pyx_t_2.interp_type = __pyx_v_interp_type;
  __pyx_t_1 = ((PyObject *)__pyx_f_8pysndlib_3clm_make_wave_train(__pyx_v_frequency, __pyx_v_wave, 0, &__pyx_t_2)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2573, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pysndlib.clm.make_wave_train", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_41 = __Pyx_Enum_Interp_to_py(__pyx_e_8pysndlib_3clm_LINEAR); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 2573, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  __pyx_k__28 = __pyx_t_41;
  __Pyx_GIVEREF(__pyx_t_41);
  __pyx_t_41 = 0;
/* … */
  __pyx_tuple__333 = PyTuple_Pack(4, __pyx_n_s_frequency, __pyx_n_s_wave, __pyx_n_s_initial_phase, __pyx_n_s_interp_type); if (unlikely(!__pyx_tuple__333)) __PYX_ERR(0, 2573, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__333);
  __Pyx_GIVEREF(__pyx_tuple__333);
  __pyx_t_41 = __Pyx_Enum_Interp_to_py(__pyx_e_8pysndlib_3clm_LINEAR); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 2573, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  __pyx_t_37 = PyTuple_New(2); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 2573, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  __Pyx_INCREF(__pyx_float_0_);
  __Pyx_GIVEREF(__pyx_float_0_);
  PyTuple_SET_ITEM(__pyx_t_37, 0, __pyx_float_0_);
  __Pyx_GIVEREF(__pyx_t_41);
  PyTuple_SET_ITEM(__pyx_t_37, 1, __pyx_t_41);
  __pyx_t_41 = 0;
  __pyx_t_41 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 2573, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  if (PyDict_SetItem(__pyx_t_41, __pyx_n_s_frequency, __pyx_n_s_float) < 0) __PYX_ERR(0, 2573, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_41, __pyx_n_s_wave, __pyx_kp_s_npt_NDArray_np_float64) < 0) __PYX_ERR(0, 2573, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_41, __pyx_n_s_initial_phase, __pyx_kp_s_Optional_float) < 0) __PYX_ERR(0, 2573, __pyx_L1_error)
  __pyx_t_40 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_267make_wave_train, 0, __pyx_n_s_make_wave_train, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__334)); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 2573, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_40, __pyx_t_37);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_40, __pyx_t_41);
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_make_wave_train, __pyx_t_40) < 0) __PYX_ERR(0, 2573, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
  __pyx_codeobj__334 = (PyObject*)__Pyx_PyCode_New(4, 0, 0, 4, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__333, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_make_wave_train, 2573, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__334)) __PYX_ERR(0, 2573, __pyx_L1_error)
/* … */
struct __pyx_opt_args_8pysndlib_3clm_make_wave_train {
  int __pyx_n;
  PyObject *initial_phase;
  PyObject *interp_type;
};
 2574:     """
 2575:     return a new wave-train generator (an extension of pulse-train). frequency is the repetition rate
 2576:     of the wave found \in wave. successive waves can overlap.
 2577:     
 2578:     :param frequency: frequency of gen \in hz
 2579:     :param wave: np.ndarray if provided is waveform
 2580:     :param initial_phase: initial phase of gen \in radians
 2581:     :param interp_type: type of interpolation used
 2582:     :return: wave_train gen
 2583:     :rtype: mus_any
 2584:     """
+2585:     check_ndim(wave)
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_check_ndim); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2585, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  __pyx_t_4 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
      __pyx_t_4 = 1;
    }
  }
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_v_wave};
    __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4);
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2585, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+2586:     check_range('frequency', frequency, 0.0, get_srate() / 2)
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_check_range); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2586, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = PyFloat_FromDouble(__pyx_v_frequency); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2586, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_5 = __pyx_f_8pysndlib_3clm_get_srate(0); if (unlikely(__pyx_t_5 == ((double)-1) && PyErr_Occurred())) __PYX_ERR(0, 2586, __pyx_L1_error)
  __pyx_t_6 = PyFloat_FromDouble((__pyx_t_5 / 2.0)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2586, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_7 = NULL;
  __pyx_t_4 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_7)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_7);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
      __pyx_t_4 = 1;
    }
  }
  {
    PyObject *__pyx_callargs[5] = {__pyx_t_7, __pyx_n_s_frequency, __pyx_t_3, __pyx_float_0_0, __pyx_t_6};
    __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 4+__pyx_t_4);
    __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2586, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 2587: 
+2588:     cdef double [:] wave_view = wave
  __pyx_t_8 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_wave, PyBUF_WRITABLE); if (unlikely(!__pyx_t_8.memview)) __PYX_ERR(0, 2588, __pyx_L1_error)
  __pyx_v_wave_view = __pyx_t_8;
  __pyx_t_8.memview = NULL;
  __pyx_t_8.data = NULL;
+2589:     gen = mus_any.from_ptr(cclm.mus_make_wave_train(frequency, initial_phase, &wave_view[0], len(wave), interp_type))
  __pyx_t_9 = __pyx_PyFloat_AsDouble(__pyx_v_initial_phase); if (unlikely((__pyx_t_9 == ((mus_float_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 2589, __pyx_L1_error)
  __pyx_t_10 = 0;
  __pyx_t_4 = -1;
  if (__pyx_t_10 < 0) {
    __pyx_t_10 += __pyx_v_wave_view.shape[0];
    if (unlikely(__pyx_t_10 < 0)) __pyx_t_4 = 0;
  } else if (unlikely(__pyx_t_10 >= __pyx_v_wave_view.shape[0])) __pyx_t_4 = 0;
  if (unlikely(__pyx_t_4 != -1)) {
    __Pyx_RaiseBufferIndexError(__pyx_t_4);
    __PYX_ERR(0, 2589, __pyx_L1_error)
  }
  __pyx_t_11 = PyObject_Length(__pyx_v_wave); if (unlikely(__pyx_t_11 == ((Py_ssize_t)-1))) __PYX_ERR(0, 2589, __pyx_L1_error)
  __pyx_t_12 = ((mus_interp_t)__Pyx_PyInt_As_mus_interp_t(__pyx_v_interp_type)); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 2589, __pyx_L1_error)
  __pyx_t_1 = ((PyObject *)__pyx_vtabptr_8pysndlib_3clm_mus_any->from_ptr(mus_make_wave_train(__pyx_v_frequency, __pyx_t_9, (&(*((double *) ( /* dim=0 */ (__pyx_v_wave_view.data + __pyx_t_10 * __pyx_v_wave_view.strides[0]) )))), __pyx_t_11, __pyx_t_12), NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2589, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_gen = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)__pyx_t_1);
  __pyx_t_1 = 0;
+2590:     gen.cache_append(wave)
  __pyx_t_1 = ((struct __pyx_vtabstruct_8pysndlib_3clm_mus_any *)__pyx_v_gen->__pyx_vtab)->cache_append(__pyx_v_gen, __pyx_v_wave, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2590, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+2591:     return gen
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __Pyx_INCREF((PyObject *)__pyx_v_gen);
  __pyx_r = __pyx_v_gen;
  goto __pyx_L0;
 2592: 
+2593: cpdef cython.double wave_train(gen: mus_any, fm: Optional[float]=None):
static PyObject *__pyx_pw_8pysndlib_3clm_269wave_train(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static double __pyx_f_8pysndlib_3clm_wave_train(struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen, CYTHON_UNUSED int __pyx_skip_dispatch, struct __pyx_opt_args_8pysndlib_3clm_wave_train *__pyx_optional_args) {
  PyObject *__pyx_v_fm = ((PyObject *)Py_None);
  double __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("wave_train", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_fm = __pyx_optional_args->fm;
    }
  }
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("pysndlib.clm.wave_train", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_269wave_train(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_268wave_train, "\n    next sample of wave_train.\n    \n    :param gen: wave_train gen\n    :param fm: fm input\n    :rtype: float\n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_269wave_train = {"wave_train", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_269wave_train, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_268wave_train};
static PyObject *__pyx_pw_8pysndlib_3clm_269wave_train(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen = 0;
  PyObject *__pyx_v_fm = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("wave_train (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_gen,&__pyx_n_s_fm,0};
    PyObject* values[2] = {0,0};
    values[1] = ((PyObject *)Py_None);
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_gen)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 2593, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_fm);
          if (value) { values[1] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 2593, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "wave_train") < 0)) __PYX_ERR(0, 2593, __pyx_L3_error)
      }
    } else {
      switch (__pyx_nargs) {
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_gen = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)values[0]);
    __pyx_v_fm = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("wave_train", 0, 1, 2, __pyx_nargs); __PYX_ERR(0, 2593, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.wave_train", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_gen), __pyx_ptype_8pysndlib_3clm_mus_any, 0, "gen", 0))) __PYX_ERR(0, 2593, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pysndlib_3clm_268wave_train(__pyx_self, __pyx_v_gen, __pyx_v_fm);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_268wave_train(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen, PyObject *__pyx_v_fm) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("wave_train", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2.__pyx_n = 1;
  __pyx_t_2.fm = __pyx_v_fm;
  __pyx_t_1 = __pyx_f_8pysndlib_3clm_wave_train(__pyx_v_gen, 0, &__pyx_t_2); if (unlikely(__pyx_t_1 == ((double)-1) && PyErr_Occurred())) __PYX_ERR(0, 2593, __pyx_L1_error)
  __pyx_t_3 = PyFloat_FromDouble(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2593, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_r = __pyx_t_3;
  __pyx_t_3 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("pysndlib.clm.wave_train", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_40 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 2593, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  if (PyDict_SetItem(__pyx_t_40, __pyx_n_s_gen, __pyx_n_s_mus_any) < 0) __PYX_ERR(0, 2593, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_40, __pyx_n_s_fm, __pyx_kp_s_Optional_float) < 0) __PYX_ERR(0, 2593, __pyx_L1_error)
  __pyx_t_41 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_269wave_train, 0, __pyx_n_s_wave_train, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__335)); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 2593, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_41, __pyx_tuple__258);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_41, __pyx_t_40);
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_wave_train, __pyx_t_41) < 0) __PYX_ERR(0, 2593, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
/* … */
  __pyx_codeobj__335 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__256, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_wave_train, 2593, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__335)) __PYX_ERR(0, 2593, __pyx_L1_error)
/* … */
struct __pyx_opt_args_8pysndlib_3clm_wave_train {
  int __pyx_n;
  PyObject *fm;
};
 2594:     """
 2595:     next sample of wave_train.
 2596:     
 2597:     :param gen: wave_train gen
 2598:     :param fm: fm input
 2599:     :rtype: float
 2600:     """
+2601:     if fm:
  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_fm); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 2601, __pyx_L1_error)
  if (__pyx_t_1) {
/* … */
  }
+2602:         return cclm.mus_wave_train(gen._ptr, fm)
    __pyx_t_2 = __pyx_PyFloat_AsDouble(__pyx_v_fm); if (unlikely((__pyx_t_2 == ((mus_float_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 2602, __pyx_L1_error)
    __pyx_r = mus_wave_train(__pyx_v_gen->_ptr, __pyx_t_2);
    goto __pyx_L0;
 2603:     else:
+2604:         return cclm.mus_wave_train_unmodulated(gen._ptr)
  /*else*/ {
    __pyx_r = mus_wave_train_unmodulated(__pyx_v_gen->_ptr);
    goto __pyx_L0;
  }
 2605: 
+2606: cpdef bint is_wave_train(gen: mus_any):
static PyObject *__pyx_pw_8pysndlib_3clm_271is_wave_train(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static int __pyx_f_8pysndlib_3clm_is_wave_train(struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen, CYTHON_UNUSED int __pyx_skip_dispatch) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_wave_train", 0);
/* … */
  /* function exit code */
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_271is_wave_train(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_270is_wave_train, "\n    returns True if gen is a wave_train.\n    \n    :param gen: gen\n    :rtype: bool\n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_271is_wave_train = {"is_wave_train", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_271is_wave_train, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_270is_wave_train};
static PyObject *__pyx_pw_8pysndlib_3clm_271is_wave_train(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_wave_train (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_gen,0};
    PyObject* values[1] = {0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_gen)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 2606, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "is_wave_train") < 0)) __PYX_ERR(0, 2606, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
    }
    __pyx_v_gen = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)values[0]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("is_wave_train", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 2606, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.is_wave_train", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_gen), __pyx_ptype_8pysndlib_3clm_mus_any, 0, "gen", 0))) __PYX_ERR(0, 2606, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pysndlib_3clm_270is_wave_train(__pyx_self, __pyx_v_gen);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_270is_wave_train(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_wave_train", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_8pysndlib_3clm_is_wave_train(__pyx_v_gen, 0); if (unlikely(__pyx_t_1 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 2606, __pyx_L1_error)
  __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2606, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pysndlib.clm.is_wave_train", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_41 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 2606, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  if (PyDict_SetItem(__pyx_t_41, __pyx_n_s_gen, __pyx_n_s_mus_any) < 0) __PYX_ERR(0, 2606, __pyx_L1_error)
  __pyx_t_40 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_271is_wave_train, 0, __pyx_n_s_is_wave_train, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__336)); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 2606, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_40, __pyx_t_41);
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_is_wave_train, __pyx_t_40) < 0) __PYX_ERR(0, 2606, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
/* … */
  __pyx_codeobj__336 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__46, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_is_wave_train, 2606, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__336)) __PYX_ERR(0, 2606, __pyx_L1_error)
 2607:     """
 2608:     returns True if gen is a wave_train.
 2609:     
 2610:     :param gen: gen
 2611:     :rtype: bool
 2612:     """
+2613:     return cclm.mus_is_wave_train(gen._ptr)
  __pyx_r = mus_is_wave_train(__pyx_v_gen->_ptr);
  goto __pyx_L0;
 2614: 
 2615: 
+2616: cpdef mus_any make_wave_train_with_env(frequency: float, envelope, size=None):
static PyObject *__pyx_pw_8pysndlib_3clm_273make_wave_train_with_env(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_f_8pysndlib_3clm_make_wave_train_with_env(double __pyx_v_frequency, PyObject *__pyx_v_envelope, CYTHON_UNUSED int __pyx_skip_dispatch, struct __pyx_opt_args_8pysndlib_3clm_make_wave_train_with_env *__pyx_optional_args) {
  PyObject *__pyx_v_size = ((PyObject *)Py_None);
  PyObject *__pyx_v_wave = NULL;
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_e = NULL;
  PyObject *__pyx_v_i = NULL;
  __Pyx_memviewslice __pyx_v_wave_view = { 0, 0, { 0 }, { 0 }, { 0 } };
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen = NULL;
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("make_wave_train_with_env", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_size = __pyx_optional_args->size;
    }
  }
  __Pyx_INCREF(__pyx_v_size);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __PYX_XCLEAR_MEMVIEW(&__pyx_t_11, 1);
  __Pyx_AddTraceback("pysndlib.clm.make_wave_train_with_env", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_wave);
  __Pyx_XDECREF((PyObject *)__pyx_v_e);
  __Pyx_XDECREF(__pyx_v_i);
  __PYX_XCLEAR_MEMVIEW(&__pyx_v_wave_view, 1);
  __Pyx_XDECREF((PyObject *)__pyx_v_gen);
  __Pyx_XDECREF(__pyx_v_size);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_273make_wave_train_with_env(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_272make_wave_train_with_env, "\n    return a new wave-train generator with the envelope loaded \\in with size.\n    \n    :param frequency: frequency of gen \\in hz\n    :param env: envelope shape to load into generator\n    :param size: size of wave derived from envelope\n    :return: wave_train gen\n    :rtype: mus_any\n    \n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_273make_wave_train_with_env = {"make_wave_train_with_env", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_273make_wave_train_with_env, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_272make_wave_train_with_env};
static PyObject *__pyx_pw_8pysndlib_3clm_273make_wave_train_with_env(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  double __pyx_v_frequency;
  PyObject *__pyx_v_envelope = 0;
  PyObject *__pyx_v_size = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("make_wave_train_with_env (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_frequency,&__pyx_n_s_envelope,&__pyx_n_s_size,0};
    PyObject* values[3] = {0,0,0};
    values[2] = ((PyObject *)Py_None);
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_frequency)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 2616, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_envelope)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 2616, __pyx_L3_error)
        else {
          __Pyx_RaiseArgtupleInvalid("make_wave_train_with_env", 0, 2, 3, 1); __PYX_ERR(0, 2616, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_size);
          if (value) { values[2] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 2616, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "make_wave_train_with_env") < 0)) __PYX_ERR(0, 2616, __pyx_L3_error)
      }
    } else {
      switch (__pyx_nargs) {
        case  3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_frequency = __pyx_PyFloat_AsDouble(values[0]); if (unlikely((__pyx_v_frequency == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 2616, __pyx_L3_error)
    __pyx_v_envelope = values[1];
    __pyx_v_size = values[2];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("make_wave_train_with_env", 0, 2, 3, __pyx_nargs); __PYX_ERR(0, 2616, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.make_wave_train_with_env", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pysndlib_3clm_272make_wave_train_with_env(__pyx_self, __pyx_v_frequency, __pyx_v_envelope, __pyx_v_size);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_272make_wave_train_with_env(CYTHON_UNUSED PyObject *__pyx_self, double __pyx_v_frequency, PyObject *__pyx_v_envelope, PyObject *__pyx_v_size) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("make_wave_train_with_env", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2.__pyx_n = 1;
  __pyx_t_2.size = __pyx_v_size;
  __pyx_t_1 = ((PyObject *)__pyx_f_8pysndlib_3clm_make_wave_train_with_env(__pyx_v_frequency, __pyx_v_envelope, 0, &__pyx_t_2)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2616, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pysndlib.clm.make_wave_train_with_env", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_40 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 2616, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  if (PyDict_SetItem(__pyx_t_40, __pyx_n_s_frequency, __pyx_n_s_float) < 0) __PYX_ERR(0, 2616, __pyx_L1_error)
  __pyx_t_41 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_273make_wave_train_with_env, 0, __pyx_n_s_make_wave_train_with_env, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__337)); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 2616, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_41, __pyx_tuple__258);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_41, __pyx_t_40);
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_make_wave_train_with_env, __pyx_t_41) < 0) __PYX_ERR(0, 2616, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
/* … */
  __pyx_codeobj__337 = (PyObject*)__Pyx_PyCode_New(3, 0, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__264, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_make_wave_train_with_env, 2616, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__337)) __PYX_ERR(0, 2616, __pyx_L1_error)
/* … */
struct __pyx_opt_args_8pysndlib_3clm_make_wave_train_with_env {
  int __pyx_n;
  PyObject *size;
};
 2617:     """
 2618:     return a new wave-train generator with the envelope loaded \in with size.
 2619:     
 2620:     :param frequency: frequency of gen \in hz
 2621:     :param env: envelope shape to load into generator
 2622:     :param size: size of wave derived from envelope
 2623:     :return: wave_train gen
 2624:     :rtype: mus_any
 2625:     
 2626:     """
+2627:     check_range('frequency', frequency, 0.0, get_srate() / 2)
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_check_range); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2627, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = PyFloat_FromDouble(__pyx_v_frequency); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2627, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = __pyx_f_8pysndlib_3clm_get_srate(0); if (unlikely(__pyx_t_4 == ((double)-1) && PyErr_Occurred())) __PYX_ERR(0, 2627, __pyx_L1_error)
  __pyx_t_5 = PyFloat_FromDouble((__pyx_t_4 / 2.0)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2627, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_6 = NULL;
  __pyx_t_7 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_6)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_6);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
      __pyx_t_7 = 1;
    }
  }
  {
    PyObject *__pyx_callargs[5] = {__pyx_t_6, __pyx_n_s_frequency, __pyx_t_3, __pyx_float_0_0, __pyx_t_5};
    __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_7, 4+__pyx_t_7);
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2627, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 2628: 
+2629:     size = size or CLM.table_size
  __pyx_t_8 = __Pyx_PyObject_IsTrue(__pyx_v_size); if (unlikely((__pyx_t_8 < 0))) __PYX_ERR(0, 2629, __pyx_L1_error)
  if (!__pyx_t_8) {
  } else {
    __Pyx_INCREF(__pyx_v_size);
    __pyx_t_1 = __pyx_v_size;
    goto __pyx_L3_bool_binop_done;
  }
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_CLM); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2629, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_table_size); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2629, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_INCREF(__pyx_t_5);
  __pyx_t_1 = __pyx_t_5;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_L3_bool_binop_done:;
  __Pyx_DECREF_SET(__pyx_v_size, __pyx_t_1);
  __pyx_t_1 = 0;
+2630:     wave = np.zeros(size)
  __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_np); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2630, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_zeros); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2630, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_5 = NULL;
  __pyx_t_7 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_5)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_5);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
      __pyx_t_7 = 1;
    }
  }
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_v_size};
    __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_7, 1+__pyx_t_7);
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2630, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  }
  __pyx_v_wave = __pyx_t_1;
  __pyx_t_1 = 0;
+2631:     e = make_env(envelope, length=size)
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_make_env); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2631, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2631, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(__pyx_v_envelope);
  __Pyx_GIVEREF(__pyx_v_envelope);
  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_envelope);
  __pyx_t_5 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2631, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_length, __pyx_v_size) < 0) __PYX_ERR(0, 2631, __pyx_L1_error)
  __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_2, __pyx_t_5); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2631, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_8pysndlib_3clm_mus_any))))) __PYX_ERR(0, 2631, __pyx_L1_error)
  __pyx_v_e = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)__pyx_t_3);
  __pyx_t_3 = 0;
+2632:     for i in range(size):
  __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_builtin_range, __pyx_v_size); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2632, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (likely(PyList_CheckExact(__pyx_t_3)) || PyTuple_CheckExact(__pyx_t_3)) {
    __pyx_t_5 = __pyx_t_3; __Pyx_INCREF(__pyx_t_5); __pyx_t_9 = 0;
    __pyx_t_10 = NULL;
  } else {
    __pyx_t_9 = -1; __pyx_t_5 = PyObject_GetIter(__pyx_t_3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2632, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_10 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_5); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 2632, __pyx_L1_error)
  }
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  for (;;) {
    if (likely(!__pyx_t_10)) {
      if (likely(PyList_CheckExact(__pyx_t_5))) {
        if (__pyx_t_9 >= PyList_GET_SIZE(__pyx_t_5)) break;
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_3 = PyList_GET_ITEM(__pyx_t_5, __pyx_t_9); __Pyx_INCREF(__pyx_t_3); __pyx_t_9++; if (unlikely((0 < 0))) __PYX_ERR(0, 2632, __pyx_L1_error)
        #else
        __pyx_t_3 = PySequence_ITEM(__pyx_t_5, __pyx_t_9); __pyx_t_9++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2632, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        #endif
      } else {
        if (__pyx_t_9 >= PyTuple_GET_SIZE(__pyx_t_5)) break;
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_3 = PyTuple_GET_ITEM(__pyx_t_5, __pyx_t_9); __Pyx_INCREF(__pyx_t_3); __pyx_t_9++; if (unlikely((0 < 0))) __PYX_ERR(0, 2632, __pyx_L1_error)
        #else
        __pyx_t_3 = PySequence_ITEM(__pyx_t_5, __pyx_t_9); __pyx_t_9++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2632, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        #endif
      }
    } else {
      __pyx_t_3 = __pyx_t_10(__pyx_t_5);
      if (unlikely(!__pyx_t_3)) {
        PyObject* exc_type = PyErr_Occurred();
        if (exc_type) {
          if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
          else __PYX_ERR(0, 2632, __pyx_L1_error)
        }
        break;
      }
      __Pyx_GOTREF(__pyx_t_3);
    }
    __Pyx_XDECREF_SET(__pyx_v_i, __pyx_t_3);
    __pyx_t_3 = 0;
/* … */
  }
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+2633:         wave[i] = env(e)
    __pyx_t_4 = __pyx_f_8pysndlib_3clm_env(__pyx_v_e, 0); if (unlikely(__pyx_t_4 == ((double)-1) && PyErr_Occurred())) __PYX_ERR(0, 2633, __pyx_L1_error)
    __pyx_t_3 = PyFloat_FromDouble(__pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2633, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    if (unlikely((PyObject_SetItem(__pyx_v_wave, __pyx_v_i, __pyx_t_3) < 0))) __PYX_ERR(0, 2633, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+2634:     cdef double [:] wave_view = wave
  __pyx_t_11 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_wave, PyBUF_WRITABLE); if (unlikely(!__pyx_t_11.memview)) __PYX_ERR(0, 2634, __pyx_L1_error)
  __pyx_v_wave_view = __pyx_t_11;
  __pyx_t_11.memview = NULL;
  __pyx_t_11.data = NULL;
+2635:     gen = mus_any.from_ptr(cclm.mus_make_wave_train(frequency, 0.0, &wave_view[0], size, <cclm.mus_interp_t>Interp.LINEAR))
  __pyx_t_12 = 0;
  __pyx_t_7 = -1;
  if (__pyx_t_12 < 0) {
    __pyx_t_12 += __pyx_v_wave_view.shape[0];
    if (unlikely(__pyx_t_12 < 0)) __pyx_t_7 = 0;
  } else if (unlikely(__pyx_t_12 >= __pyx_v_wave_view.shape[0])) __pyx_t_7 = 0;
  if (unlikely(__pyx_t_7 != -1)) {
    __Pyx_RaiseBufferIndexError(__pyx_t_7);
    __PYX_ERR(0, 2635, __pyx_L1_error)
  }
  __pyx_t_13 = __Pyx_PyInt_As_mus_long_t(__pyx_v_size); if (unlikely((__pyx_t_13 == ((mus_long_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 2635, __pyx_L1_error)
  __pyx_t_5 = ((PyObject *)__pyx_vtabptr_8pysndlib_3clm_mus_any->from_ptr(mus_make_wave_train(__pyx_v_frequency, 0.0, (&(*((double *) ( /* dim=0 */ (__pyx_v_wave_view.data + __pyx_t_12 * __pyx_v_wave_view.strides[0]) )))), __pyx_t_13, ((mus_interp_t)__pyx_e_8pysndlib_3clm_LINEAR)), NULL)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2635, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_v_gen = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)__pyx_t_5);
  __pyx_t_5 = 0;
+2636:     gen.cache_append(wave)
  __pyx_t_5 = ((struct __pyx_vtabstruct_8pysndlib_3clm_mus_any *)__pyx_v_gen->__pyx_vtab)->cache_append(__pyx_v_gen, __pyx_v_wave, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2636, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+2637:     return gen
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __Pyx_INCREF((PyObject *)__pyx_v_gen);
  __pyx_r = __pyx_v_gen;
  goto __pyx_L0;
 2638: 
 2639: # ---------------- rand, rand_interp ---------------- #
+2640: cpdef mus_any make_rand(frequency: float, amplitude: Optional[float]=1.0, distribution=None):
static PyObject *__pyx_pw_8pysndlib_3clm_275make_rand(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_f_8pysndlib_3clm_make_rand(double __pyx_v_frequency, CYTHON_UNUSED int __pyx_skip_dispatch, struct __pyx_opt_args_8pysndlib_3clm_make_rand *__pyx_optional_args) {
  PyObject *__pyx_v_amplitude = ((PyObject *)__pyx_float_1_0);
  PyObject *__pyx_v_distribution = ((PyObject *)Py_None);
  __Pyx_memviewslice __pyx_v_distribution_view = { 0, 0, { 0 }, { 0 }, { 0 } };
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen = NULL;
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("make_rand", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_amplitude = __pyx_optional_args->amplitude;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_distribution = __pyx_optional_args->distribution;
      }
    }
  }
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __PYX_XCLEAR_MEMVIEW(&__pyx_t_8, 1);
  __Pyx_AddTraceback("pysndlib.clm.make_rand", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __PYX_XCLEAR_MEMVIEW(&__pyx_v_distribution_view, 1);
  __Pyx_XDECREF((PyObject *)__pyx_v_gen);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_275make_rand(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_274make_rand, "\n    return a new rand generator, producing a sequence of random numbers (a step  function). frequency\n    is the rate at which new numbers are chosen.\n    \n    :param frequency: frequency at which new random numbers occur\n    :param amplitude: numbers are between -amplitude and amplitude\n    :param distribution: distribution envelope\n    :return: rand gen\n    :rtype: mus_any\n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_275make_rand = {"make_rand", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_275make_rand, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_274make_rand};
static PyObject *__pyx_pw_8pysndlib_3clm_275make_rand(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  double __pyx_v_frequency;
  PyObject *__pyx_v_amplitude = 0;
  PyObject *__pyx_v_distribution = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("make_rand (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_frequency,&__pyx_n_s_amplitude,&__pyx_n_s_distribution,0};
    PyObject* values[3] = {0,0,0};
    values[1] = ((PyObject *)__pyx_float_1_0);
    values[2] = ((PyObject *)Py_None);
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_frequency)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 2640, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_amplitude);
          if (value) { values[1] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 2640, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_distribution);
          if (value) { values[2] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 2640, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "make_rand") < 0)) __PYX_ERR(0, 2640, __pyx_L3_error)
      }
    } else {
      switch (__pyx_nargs) {
        case  3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_frequency = __pyx_PyFloat_AsDouble(values[0]); if (unlikely((__pyx_v_frequency == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 2640, __pyx_L3_error)
    __pyx_v_amplitude = values[1];
    __pyx_v_distribution = values[2];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("make_rand", 0, 1, 3, __pyx_nargs); __PYX_ERR(0, 2640, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.make_rand", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pysndlib_3clm_274make_rand(__pyx_self, __pyx_v_frequency, __pyx_v_amplitude, __pyx_v_distribution);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_274make_rand(CYTHON_UNUSED PyObject *__pyx_self, double __pyx_v_frequency, PyObject *__pyx_v_amplitude, PyObject *__pyx_v_distribution) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("make_rand", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2.__pyx_n = 2;
  __pyx_t_2.amplitude = __pyx_v_amplitude;
  __pyx_t_2.distribution = __pyx_v_distribution;
  __pyx_t_1 = ((PyObject *)__pyx_f_8pysndlib_3clm_make_rand(__pyx_v_frequency, 0, &__pyx_t_2)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2640, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pysndlib.clm.make_rand", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__338 = PyTuple_Pack(3, __pyx_n_s_frequency, __pyx_n_s_amplitude, __pyx_n_s_distribution); if (unlikely(!__pyx_tuple__338)) __PYX_ERR(0, 2640, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__338);
  __Pyx_GIVEREF(__pyx_tuple__338);
  __pyx_codeobj__339 = (PyObject*)__Pyx_PyCode_New(3, 0, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__338, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_make_rand, 2640, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__339)) __PYX_ERR(0, 2640, __pyx_L1_error)
/* … */
  __pyx_t_41 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 2640, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  if (PyDict_SetItem(__pyx_t_41, __pyx_n_s_frequency, __pyx_n_s_float) < 0) __PYX_ERR(0, 2640, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_41, __pyx_n_s_amplitude, __pyx_kp_s_Optional_float) < 0) __PYX_ERR(0, 2640, __pyx_L1_error)
  __pyx_t_40 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_275make_rand, 0, __pyx_n_s_make_rand, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__339)); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 2640, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_40, __pyx_tuple__340);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_40, __pyx_t_41);
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_make_rand, __pyx_t_40) < 0) __PYX_ERR(0, 2640, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
  __pyx_tuple__340 = PyTuple_Pack(2, __pyx_float_1_0, Py_None); if (unlikely(!__pyx_tuple__340)) __PYX_ERR(0, 2640, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__340);
  __Pyx_GIVEREF(__pyx_tuple__340);
/* … */
struct __pyx_opt_args_8pysndlib_3clm_make_rand {
  int __pyx_n;
  PyObject *amplitude;
  PyObject *distribution;
};
 2641:     """
 2642:     return a new rand generator, producing a sequence of random numbers (a step  function). frequency
 2643:     is the rate at which new numbers are chosen.
 2644:     
 2645:     :param frequency: frequency at which new random numbers occur
 2646:     :param amplitude: numbers are between -amplitude and amplitude
 2647:     :param distribution: distribution envelope
 2648:     :return: rand gen
 2649:     :rtype: mus_any
 2650:     """
+2651:     check_range('frequency', frequency, 0.0, get_srate())
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_check_range); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2651, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = PyFloat_FromDouble(__pyx_v_frequency); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2651, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = __pyx_f_8pysndlib_3clm_get_srate(0); if (unlikely(__pyx_t_4 == ((double)-1) && PyErr_Occurred())) __PYX_ERR(0, 2651, __pyx_L1_error)
  __pyx_t_5 = PyFloat_FromDouble(__pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2651, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_6 = NULL;
  __pyx_t_7 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_6)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_6);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
      __pyx_t_7 = 1;
    }
  }
  {
    PyObject *__pyx_callargs[5] = {__pyx_t_6, __pyx_n_s_frequency, __pyx_t_3, __pyx_float_0_0, __pyx_t_5};
    __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_7, 4+__pyx_t_7);
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2651, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+2652:     cdef double [:] distribution_view = None
  __pyx_t_8 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(Py_None, PyBUF_WRITABLE); if (unlikely(!__pyx_t_8.memview)) __PYX_ERR(0, 2652, __pyx_L1_error)
  __pyx_v_distribution_view = __pyx_t_8;
  __pyx_t_8.memview = NULL;
  __pyx_t_8.data = NULL;
 2653: 
+2654:     if distribution:
  __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_v_distribution); if (unlikely((__pyx_t_9 < 0))) __PYX_ERR(0, 2654, __pyx_L1_error)
  if (__pyx_t_9) {
/* … */
  }
+2655:         check_ndim(distribution)
    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_check_ndim); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2655, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_5 = NULL;
    __pyx_t_7 = 0;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
      __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_2);
      if (likely(__pyx_t_5)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
        __Pyx_INCREF(__pyx_t_5);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_2, function);
        __pyx_t_7 = 1;
      }
    }
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_v_distribution};
      __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_7, 1+__pyx_t_7);
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2655, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    }
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+2656:         distribution_view = distribution
    __pyx_t_8 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_distribution, PyBUF_WRITABLE); if (unlikely(!__pyx_t_8.memview)) __PYX_ERR(0, 2656, __pyx_L1_error)
    __PYX_XCLEAR_MEMVIEW(&__pyx_v_distribution_view, 1);
    __pyx_v_distribution_view = __pyx_t_8;
    __pyx_t_8.memview = NULL;
    __pyx_t_8.data = NULL;
+2657:         gen =  mus_any.from_ptr(cclm.mus_make_rand_with_distribution(frequency, amplitude, &distribution_view[0], len(distribution)))
    __pyx_t_10 = __pyx_PyFloat_AsDouble(__pyx_v_amplitude); if (unlikely((__pyx_t_10 == ((mus_float_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 2657, __pyx_L1_error)
    __pyx_t_11 = 0;
    __pyx_t_7 = -1;
    if (__pyx_t_11 < 0) {
      __pyx_t_11 += __pyx_v_distribution_view.shape[0];
      if (unlikely(__pyx_t_11 < 0)) __pyx_t_7 = 0;
    } else if (unlikely(__pyx_t_11 >= __pyx_v_distribution_view.shape[0])) __pyx_t_7 = 0;
    if (unlikely(__pyx_t_7 != -1)) {
      __Pyx_RaiseBufferIndexError(__pyx_t_7);
      __PYX_ERR(0, 2657, __pyx_L1_error)
    }
    __pyx_t_12 = PyObject_Length(__pyx_v_distribution); if (unlikely(__pyx_t_12 == ((Py_ssize_t)-1))) __PYX_ERR(0, 2657, __pyx_L1_error)
    __pyx_t_1 = ((PyObject *)__pyx_vtabptr_8pysndlib_3clm_mus_any->from_ptr(mus_make_rand_with_distribution(__pyx_v_frequency, __pyx_t_10, (&(*((double *) ( /* dim=0 */ (__pyx_v_distribution_view.data + __pyx_t_11 * __pyx_v_distribution_view.strides[0]) )))), __pyx_t_12), NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2657, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_v_gen = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)__pyx_t_1);
    __pyx_t_1 = 0;
+2658:         gen.cache_append(distribution)
    __pyx_t_1 = ((struct __pyx_vtabstruct_8pysndlib_3clm_mus_any *)__pyx_v_gen->__pyx_vtab)->cache_append(__pyx_v_gen, __pyx_v_distribution, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2658, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+2659:         return gen
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __Pyx_INCREF((PyObject *)__pyx_v_gen);
    __pyx_r = __pyx_v_gen;
    goto __pyx_L0;
 2660:     else:
+2661:         return mus_any.from_ptr(cclm.mus_make_rand(frequency, amplitude))
  /*else*/ {
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __pyx_t_10 = __pyx_PyFloat_AsDouble(__pyx_v_amplitude); if (unlikely((__pyx_t_10 == ((mus_float_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 2661, __pyx_L1_error)
    __pyx_t_1 = ((PyObject *)__pyx_vtabptr_8pysndlib_3clm_mus_any->from_ptr(mus_make_rand(__pyx_v_frequency, __pyx_t_10), NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2661, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_r = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)__pyx_t_1);
    __pyx_t_1 = 0;
    goto __pyx_L0;
  }
 2662: 
+2663: cpdef cython.double rand(gen: mus_any, sweep: Optional[float]=None):
static PyObject *__pyx_pw_8pysndlib_3clm_277rand(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static double __pyx_f_8pysndlib_3clm_rand(struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen, CYTHON_UNUSED int __pyx_skip_dispatch, struct __pyx_opt_args_8pysndlib_3clm_rand *__pyx_optional_args) {
  PyObject *__pyx_v_sweep = ((PyObject *)Py_None);
  double __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("rand", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_sweep = __pyx_optional_args->sweep;
    }
  }
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("pysndlib.clm.rand", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_277rand(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_276rand, "\n    gen's current random number. sweep modulates the rate at which the current number is changed.\n    \n    :param gen: rand gen\n    :param sweep: fm\n    :rtype: float\n    \n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_277rand = {"rand", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_277rand, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_276rand};
static PyObject *__pyx_pw_8pysndlib_3clm_277rand(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen = 0;
  PyObject *__pyx_v_sweep = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("rand (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_gen,&__pyx_n_s_sweep,0};
    PyObject* values[2] = {0,0};
    values[1] = ((PyObject *)Py_None);
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_gen)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 2663, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_sweep);
          if (value) { values[1] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 2663, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "rand") < 0)) __PYX_ERR(0, 2663, __pyx_L3_error)
      }
    } else {
      switch (__pyx_nargs) {
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_gen = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)values[0]);
    __pyx_v_sweep = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("rand", 0, 1, 2, __pyx_nargs); __PYX_ERR(0, 2663, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.rand", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_gen), __pyx_ptype_8pysndlib_3clm_mus_any, 0, "gen", 0))) __PYX_ERR(0, 2663, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pysndlib_3clm_276rand(__pyx_self, __pyx_v_gen, __pyx_v_sweep);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_276rand(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen, PyObject *__pyx_v_sweep) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("rand", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2.__pyx_n = 1;
  __pyx_t_2.sweep = __pyx_v_sweep;
  __pyx_t_1 = __pyx_f_8pysndlib_3clm_rand(__pyx_v_gen, 0, &__pyx_t_2); if (unlikely(__pyx_t_1 == ((double)-1) && PyErr_Occurred())) __PYX_ERR(0, 2663, __pyx_L1_error)
  __pyx_t_3 = PyFloat_FromDouble(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2663, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_r = __pyx_t_3;
  __pyx_t_3 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("pysndlib.clm.rand", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__341 = PyTuple_Pack(2, __pyx_n_s_gen, __pyx_n_s_sweep); if (unlikely(!__pyx_tuple__341)) __PYX_ERR(0, 2663, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__341);
  __Pyx_GIVEREF(__pyx_tuple__341);
/* … */
  __pyx_t_40 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 2663, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  if (PyDict_SetItem(__pyx_t_40, __pyx_n_s_gen, __pyx_n_s_mus_any) < 0) __PYX_ERR(0, 2663, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_40, __pyx_n_s_sweep, __pyx_kp_s_Optional_float) < 0) __PYX_ERR(0, 2663, __pyx_L1_error)
  __pyx_t_41 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_277rand, 0, __pyx_n_s_rand, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__342)); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 2663, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_41, __pyx_tuple__258);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_41, __pyx_t_40);
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_rand, __pyx_t_41) < 0) __PYX_ERR(0, 2663, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
  __pyx_codeobj__342 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__341, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_rand, 2663, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__342)) __PYX_ERR(0, 2663, __pyx_L1_error)
/* … */
struct __pyx_opt_args_8pysndlib_3clm_rand {
  int __pyx_n;
  PyObject *sweep;
};
 2664:     """
 2665:     gen's current random number. sweep modulates the rate at which the current number is changed.
 2666:     
 2667:     :param gen: rand gen
 2668:     :param sweep: fm
 2669:     :rtype: float
 2670:     
 2671:     """
+2672:     if(sweep):
  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_sweep); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 2672, __pyx_L1_error)
  if (__pyx_t_1) {
/* … */
  }
+2673:         return cclm.mus_rand(gen._ptr, sweep)
    __pyx_t_2 = __pyx_PyFloat_AsDouble(__pyx_v_sweep); if (unlikely((__pyx_t_2 == ((mus_float_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 2673, __pyx_L1_error)
    __pyx_r = mus_rand(__pyx_v_gen->_ptr, __pyx_t_2);
    goto __pyx_L0;
 2674:     else:
+2675:         return cclm.mus_rand_unmodulated(gen._ptr)
  /*else*/ {
    __pyx_r = mus_rand_unmodulated(__pyx_v_gen->_ptr);
    goto __pyx_L0;
  }
 2676: 
+2677: cpdef bint is_rand(gen: mus_any):
static PyObject *__pyx_pw_8pysndlib_3clm_279is_rand(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static int __pyx_f_8pysndlib_3clm_is_rand(struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen, CYTHON_UNUSED int __pyx_skip_dispatch) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_rand", 0);
/* … */
  /* function exit code */
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_279is_rand(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_278is_rand, "\n    returns True if gen is a rand.\n    \n    :param gen: gen\n    :rtype: bool\n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_279is_rand = {"is_rand", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_279is_rand, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_278is_rand};
static PyObject *__pyx_pw_8pysndlib_3clm_279is_rand(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_rand (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_gen,0};
    PyObject* values[1] = {0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_gen)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 2677, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "is_rand") < 0)) __PYX_ERR(0, 2677, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
    }
    __pyx_v_gen = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)values[0]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("is_rand", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 2677, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.is_rand", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_gen), __pyx_ptype_8pysndlib_3clm_mus_any, 0, "gen", 0))) __PYX_ERR(0, 2677, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pysndlib_3clm_278is_rand(__pyx_self, __pyx_v_gen);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_278is_rand(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_rand", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_8pysndlib_3clm_is_rand(__pyx_v_gen, 0); if (unlikely(__pyx_t_1 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 2677, __pyx_L1_error)
  __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2677, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pysndlib.clm.is_rand", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_41 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 2677, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  if (PyDict_SetItem(__pyx_t_41, __pyx_n_s_gen, __pyx_n_s_mus_any) < 0) __PYX_ERR(0, 2677, __pyx_L1_error)
  __pyx_t_40 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_279is_rand, 0, __pyx_n_s_is_rand, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__343)); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 2677, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_40, __pyx_t_41);
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_is_rand, __pyx_t_40) < 0) __PYX_ERR(0, 2677, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
/* … */
  __pyx_codeobj__343 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__46, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_is_rand, 2677, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__343)) __PYX_ERR(0, 2677, __pyx_L1_error)
 2678:     """
 2679:     returns True if gen is a rand.
 2680:     
 2681:     :param gen: gen
 2682:     :rtype: bool
 2683:     """
+2684:     return cclm.mus_is_rand(gen._ptr)
  __pyx_r = mus_is_rand(__pyx_v_gen->_ptr);
  goto __pyx_L0;
 2685: 
+2686: cpdef mus_any make_rand_interp(frequency: float, amplitude: float, distribution=None):
static PyObject *__pyx_pw_8pysndlib_3clm_281make_rand_interp(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_f_8pysndlib_3clm_make_rand_interp(double __pyx_v_frequency, double __pyx_v_amplitude, CYTHON_UNUSED int __pyx_skip_dispatch, struct __pyx_opt_args_8pysndlib_3clm_make_rand_interp *__pyx_optional_args) {
  PyObject *__pyx_v_distribution = ((PyObject *)Py_None);
  __Pyx_memviewslice __pyx_v_distribution_view = { 0, 0, { 0 }, { 0 }, { 0 } };
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen = NULL;
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("make_rand_interp", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_distribution = __pyx_optional_args->distribution;
    }
  }
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __PYX_XCLEAR_MEMVIEW(&__pyx_t_8, 1);
  __Pyx_AddTraceback("pysndlib.clm.make_rand_interp", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __PYX_XCLEAR_MEMVIEW(&__pyx_v_distribution_view, 1);
  __Pyx_XDECREF((PyObject *)__pyx_v_gen);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_281make_rand_interp(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_280make_rand_interp, "\n    return a new rand_interp generator, producing linearly interpolated random numbers. frequency is\n    the rate at which new end-points are chosen.\n    \n    :param frequency: frequency at which new random numbers occur\n    :param amplitude: numbers are between -amplitude and amplitude\n    :param distribution: distribution envelope\n    :return: rand_interp gen\n    :rtype: mus_any\n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_281make_rand_interp = {"make_rand_interp", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_281make_rand_interp, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_280make_rand_interp};
static PyObject *__pyx_pw_8pysndlib_3clm_281make_rand_interp(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  double __pyx_v_frequency;
  double __pyx_v_amplitude;
  PyObject *__pyx_v_distribution = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("make_rand_interp (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_frequency,&__pyx_n_s_amplitude,&__pyx_n_s_distribution,0};
    PyObject* values[3] = {0,0,0};
    values[2] = ((PyObject *)Py_None);
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_frequency)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 2686, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_amplitude)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 2686, __pyx_L3_error)
        else {
          __Pyx_RaiseArgtupleInvalid("make_rand_interp", 0, 2, 3, 1); __PYX_ERR(0, 2686, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_distribution);
          if (value) { values[2] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 2686, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "make_rand_interp") < 0)) __PYX_ERR(0, 2686, __pyx_L3_error)
      }
    } else {
      switch (__pyx_nargs) {
        case  3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_frequency = __pyx_PyFloat_AsDouble(values[0]); if (unlikely((__pyx_v_frequency == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 2686, __pyx_L3_error)
    __pyx_v_amplitude = __pyx_PyFloat_AsDouble(values[1]); if (unlikely((__pyx_v_amplitude == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 2686, __pyx_L3_error)
    __pyx_v_distribution = values[2];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("make_rand_interp", 0, 2, 3, __pyx_nargs); __PYX_ERR(0, 2686, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.make_rand_interp", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pysndlib_3clm_280make_rand_interp(__pyx_self, __pyx_v_frequency, __pyx_v_amplitude, __pyx_v_distribution);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_280make_rand_interp(CYTHON_UNUSED PyObject *__pyx_self, double __pyx_v_frequency, double __pyx_v_amplitude, PyObject *__pyx_v_distribution) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("make_rand_interp", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2.__pyx_n = 1;
  __pyx_t_2.distribution = __pyx_v_distribution;
  __pyx_t_1 = ((PyObject *)__pyx_f_8pysndlib_3clm_make_rand_interp(__pyx_v_frequency, __pyx_v_amplitude, 0, &__pyx_t_2)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2686, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pysndlib.clm.make_rand_interp", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_40 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 2686, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  if (PyDict_SetItem(__pyx_t_40, __pyx_n_s_frequency, __pyx_n_s_float) < 0) __PYX_ERR(0, 2686, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_40, __pyx_n_s_amplitude, __pyx_n_s_float) < 0) __PYX_ERR(0, 2686, __pyx_L1_error)
  __pyx_t_41 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_281make_rand_interp, 0, __pyx_n_s_make_rand_interp, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__344)); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 2686, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_41, __pyx_tuple__258);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_41, __pyx_t_40);
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_make_rand_interp, __pyx_t_41) < 0) __PYX_ERR(0, 2686, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
/* … */
  __pyx_codeobj__344 = (PyObject*)__Pyx_PyCode_New(3, 0, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__338, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_make_rand_interp, 2686, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__344)) __PYX_ERR(0, 2686, __pyx_L1_error)
/* … */
struct __pyx_opt_args_8pysndlib_3clm_make_rand_interp {
  int __pyx_n;
  PyObject *distribution;
};
 2687:     """
 2688:     return a new rand_interp generator, producing linearly interpolated random numbers. frequency is
 2689:     the rate at which new end-points are chosen.
 2690:     
 2691:     :param frequency: frequency at which new random numbers occur
 2692:     :param amplitude: numbers are between -amplitude and amplitude
 2693:     :param distribution: distribution envelope
 2694:     :return: rand_interp gen
 2695:     :rtype: mus_any
 2696:     """
+2697:     check_range('frequency', frequency, 0.0, get_srate())
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_check_range); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2697, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = PyFloat_FromDouble(__pyx_v_frequency); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2697, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = __pyx_f_8pysndlib_3clm_get_srate(0); if (unlikely(__pyx_t_4 == ((double)-1) && PyErr_Occurred())) __PYX_ERR(0, 2697, __pyx_L1_error)
  __pyx_t_5 = PyFloat_FromDouble(__pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2697, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_6 = NULL;
  __pyx_t_7 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_6)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_6);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
      __pyx_t_7 = 1;
    }
  }
  {
    PyObject *__pyx_callargs[5] = {__pyx_t_6, __pyx_n_s_frequency, __pyx_t_3, __pyx_float_0_0, __pyx_t_5};
    __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_7, 4+__pyx_t_7);
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2697, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+2698:     cdef double [:] distribution_view = None
  __pyx_t_8 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(Py_None, PyBUF_WRITABLE); if (unlikely(!__pyx_t_8.memview)) __PYX_ERR(0, 2698, __pyx_L1_error)
  __pyx_v_distribution_view = __pyx_t_8;
  __pyx_t_8.memview = NULL;
  __pyx_t_8.data = NULL;
 2699: 
+2700:     if distribution:
  __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_v_distribution); if (unlikely((__pyx_t_9 < 0))) __PYX_ERR(0, 2700, __pyx_L1_error)
  if (__pyx_t_9) {
/* … */
  }
+2701:         check_ndim(distribution)
    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_check_ndim); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2701, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_5 = NULL;
    __pyx_t_7 = 0;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
      __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_2);
      if (likely(__pyx_t_5)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
        __Pyx_INCREF(__pyx_t_5);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_2, function);
        __pyx_t_7 = 1;
      }
    }
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_v_distribution};
      __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_7, 1+__pyx_t_7);
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2701, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    }
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+2702:         distribution_view = distribution
    __pyx_t_8 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_distribution, PyBUF_WRITABLE); if (unlikely(!__pyx_t_8.memview)) __PYX_ERR(0, 2702, __pyx_L1_error)
    __PYX_XCLEAR_MEMVIEW(&__pyx_v_distribution_view, 1);
    __pyx_v_distribution_view = __pyx_t_8;
    __pyx_t_8.memview = NULL;
    __pyx_t_8.data = NULL;
+2703:         gen = mus_any.from_ptr(cclm.mus_make_rand_interp_with_distribution(frequency, amplitude, &distribution_view[0], len(distribution)))
    __pyx_t_10 = 0;
    __pyx_t_7 = -1;
    if (__pyx_t_10 < 0) {
      __pyx_t_10 += __pyx_v_distribution_view.shape[0];
      if (unlikely(__pyx_t_10 < 0)) __pyx_t_7 = 0;
    } else if (unlikely(__pyx_t_10 >= __pyx_v_distribution_view.shape[0])) __pyx_t_7 = 0;
    if (unlikely(__pyx_t_7 != -1)) {
      __Pyx_RaiseBufferIndexError(__pyx_t_7);
      __PYX_ERR(0, 2703, __pyx_L1_error)
    }
    __pyx_t_11 = PyObject_Length(__pyx_v_distribution); if (unlikely(__pyx_t_11 == ((Py_ssize_t)-1))) __PYX_ERR(0, 2703, __pyx_L1_error)
    __pyx_t_1 = ((PyObject *)__pyx_vtabptr_8pysndlib_3clm_mus_any->from_ptr(mus_make_rand_interp_with_distribution(__pyx_v_frequency, __pyx_v_amplitude, (&(*((double *) ( /* dim=0 */ (__pyx_v_distribution_view.data + __pyx_t_10 * __pyx_v_distribution_view.strides[0]) )))), __pyx_t_11), NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2703, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_v_gen = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)__pyx_t_1);
    __pyx_t_1 = 0;
+2704:         gen.cache_append(distribution)
    __pyx_t_1 = ((struct __pyx_vtabstruct_8pysndlib_3clm_mus_any *)__pyx_v_gen->__pyx_vtab)->cache_append(__pyx_v_gen, __pyx_v_distribution, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2704, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+2705:         return gen
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __Pyx_INCREF((PyObject *)__pyx_v_gen);
    __pyx_r = __pyx_v_gen;
    goto __pyx_L0;
 2706:     else:
+2707:         return mus_any.from_ptr(cclm.mus_make_rand_interp(frequency, amplitude))
  /*else*/ {
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __pyx_t_1 = ((PyObject *)__pyx_vtabptr_8pysndlib_3clm_mus_any->from_ptr(mus_make_rand_interp(__pyx_v_frequency, __pyx_v_amplitude), NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2707, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_r = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)__pyx_t_1);
    __pyx_t_1 = 0;
    goto __pyx_L0;
  }
 2708: 
+2709: cpdef rand_interp(gen: mus_any, sweep: Optional[float]=0.):
static PyObject *__pyx_pw_8pysndlib_3clm_283rand_interp(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyObject *__pyx_f_8pysndlib_3clm_rand_interp(struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen, CYTHON_UNUSED int __pyx_skip_dispatch, struct __pyx_opt_args_8pysndlib_3clm_rand_interp *__pyx_optional_args) {
  PyObject *__pyx_v_sweep = ((PyObject *)__pyx_float_0_);
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("rand_interp", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_sweep = __pyx_optional_args->sweep;
    }
  }
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("pysndlib.clm.rand_interp", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_283rand_interp(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_282rand_interp, "\n    gen's current (interpolating) random number. fm modulates the rate at which new segment end-points\n    are chosen.\n    \n    :param gen: rand_interp gen\n    :param sweep: fm \n    :rtype: float\n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_283rand_interp = {"rand_interp", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_283rand_interp, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_282rand_interp};
static PyObject *__pyx_pw_8pysndlib_3clm_283rand_interp(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen = 0;
  PyObject *__pyx_v_sweep = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("rand_interp (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_gen,&__pyx_n_s_sweep,0};
    PyObject* values[2] = {0,0};
    values[1] = ((PyObject *)__pyx_float_0_);
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_gen)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 2709, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_sweep);
          if (value) { values[1] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 2709, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "rand_interp") < 0)) __PYX_ERR(0, 2709, __pyx_L3_error)
      }
    } else {
      switch (__pyx_nargs) {
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_gen = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)values[0]);
    __pyx_v_sweep = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("rand_interp", 0, 1, 2, __pyx_nargs); __PYX_ERR(0, 2709, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.rand_interp", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_gen), __pyx_ptype_8pysndlib_3clm_mus_any, 0, "gen", 0))) __PYX_ERR(0, 2709, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pysndlib_3clm_282rand_interp(__pyx_self, __pyx_v_gen, __pyx_v_sweep);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_282rand_interp(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen, PyObject *__pyx_v_sweep) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("rand_interp", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2.__pyx_n = 1;
  __pyx_t_2.sweep = __pyx_v_sweep;
  __pyx_t_1 = __pyx_f_8pysndlib_3clm_rand_interp(__pyx_v_gen, 0, &__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2709, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pysndlib.clm.rand_interp", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_codeobj__345 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__341, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_rand_interp, 2709, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__345)) __PYX_ERR(0, 2709, __pyx_L1_error)
/* … */
  __pyx_t_41 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 2709, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  if (PyDict_SetItem(__pyx_t_41, __pyx_n_s_gen, __pyx_n_s_mus_any) < 0) __PYX_ERR(0, 2709, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_41, __pyx_n_s_sweep, __pyx_kp_s_Optional_float) < 0) __PYX_ERR(0, 2709, __pyx_L1_error)
  __pyx_t_40 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_283rand_interp, 0, __pyx_n_s_rand_interp, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__345)); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 2709, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_40, __pyx_tuple__346);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_40, __pyx_t_41);
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_rand_interp, __pyx_t_40) < 0) __PYX_ERR(0, 2709, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
  __pyx_tuple__346 = PyTuple_Pack(1, __pyx_float_0_); if (unlikely(!__pyx_tuple__346)) __PYX_ERR(0, 2709, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__346);
  __Pyx_GIVEREF(__pyx_tuple__346);
/* … */
struct __pyx_opt_args_8pysndlib_3clm_rand_interp {
  int __pyx_n;
  PyObject *sweep;
};
 2710:     """
 2711:     gen's current (interpolating) random number. fm modulates the rate at which new segment end-points
 2712:     are chosen.
 2713:     
 2714:     :param gen: rand_interp gen
 2715:     :param sweep: fm 
 2716:     :rtype: float
 2717:     """
+2718:     if(sweep):
  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_sweep); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 2718, __pyx_L1_error)
  if (__pyx_t_1) {
/* … */
  }
+2719:         return cclm.mus_rand_interp(gen._ptr, sweep)
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_2 = __pyx_PyFloat_AsDouble(__pyx_v_sweep); if (unlikely((__pyx_t_2 == ((mus_float_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 2719, __pyx_L1_error)
    __pyx_t_3 = PyFloat_FromDouble(mus_rand_interp(__pyx_v_gen->_ptr, __pyx_t_2)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2719, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_r = __pyx_t_3;
    __pyx_t_3 = 0;
    goto __pyx_L0;
 2720:     else:
+2721:         return cclm.mus_rand_interp_unmodulated(gen._ptr)
  /*else*/ {
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_3 = PyFloat_FromDouble(mus_rand_interp_unmodulated(__pyx_v_gen->_ptr)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2721, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_r = __pyx_t_3;
    __pyx_t_3 = 0;
    goto __pyx_L0;
  }
 2722: 
+2723: cpdef bint is_rand_interp(gen: mus_any):
static PyObject *__pyx_pw_8pysndlib_3clm_285is_rand_interp(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static int __pyx_f_8pysndlib_3clm_is_rand_interp(struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen, CYTHON_UNUSED int __pyx_skip_dispatch) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_rand_interp", 0);
/* … */
  /* function exit code */
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_285is_rand_interp(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_284is_rand_interp, "\n    returns True if gen is a rand_interp.\n    :param gen: gen\n    :rtype: bool\n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_285is_rand_interp = {"is_rand_interp", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_285is_rand_interp, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_284is_rand_interp};
static PyObject *__pyx_pw_8pysndlib_3clm_285is_rand_interp(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_rand_interp (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_gen,0};
    PyObject* values[1] = {0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_gen)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 2723, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "is_rand_interp") < 0)) __PYX_ERR(0, 2723, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
    }
    __pyx_v_gen = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)values[0]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("is_rand_interp", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 2723, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.is_rand_interp", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_gen), __pyx_ptype_8pysndlib_3clm_mus_any, 0, "gen", 0))) __PYX_ERR(0, 2723, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pysndlib_3clm_284is_rand_interp(__pyx_self, __pyx_v_gen);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_284is_rand_interp(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_rand_interp", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_8pysndlib_3clm_is_rand_interp(__pyx_v_gen, 0); if (unlikely(__pyx_t_1 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 2723, __pyx_L1_error)
  __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2723, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pysndlib.clm.is_rand_interp", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_40 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 2723, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  if (PyDict_SetItem(__pyx_t_40, __pyx_n_s_gen, __pyx_n_s_mus_any) < 0) __PYX_ERR(0, 2723, __pyx_L1_error)
  __pyx_t_41 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_285is_rand_interp, 0, __pyx_n_s_is_rand_interp, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__347)); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 2723, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_41, __pyx_t_40);
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_is_rand_interp, __pyx_t_41) < 0) __PYX_ERR(0, 2723, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
/* … */
  __pyx_codeobj__347 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__46, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_is_rand_interp, 2723, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__347)) __PYX_ERR(0, 2723, __pyx_L1_error)
 2724:     """
 2725:     returns True if gen is a rand_interp.
 2726:     :param gen: gen
 2727:     :rtype: bool
 2728:     """
+2729:     return cclm.mus_is_rand_interp(gen._ptr)
  __pyx_r = mus_is_rand_interp(__pyx_v_gen->_ptr);
  goto __pyx_L0;
 2730: 
 2731: 
 2732: # ---------------- simple filters ---------------- #
+2733: cpdef mus_any make_one_pole(a0: cython.double, b1: cython.double):
static PyObject *__pyx_pw_8pysndlib_3clm_287make_one_pole(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_f_8pysndlib_3clm_make_one_pole(double __pyx_v_a0, double __pyx_v_b1, CYTHON_UNUSED int __pyx_skip_dispatch) {
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("make_one_pole", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pysndlib.clm.make_one_pole", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_287make_one_pole(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_286make_one_pole, "\n    return a new one_pole filter: y(n) = a0 x(n) - b1 y(n-1)\n    b1 < 0.0 gives lowpass, b1 > 0.0 gives highpass.\n    \n    :param a0: coefficient\n    :param b1: coefficient\n    :return: one_pole gen\n    :rtype: mus_any\n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_287make_one_pole = {"make_one_pole", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_287make_one_pole, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_286make_one_pole};
static PyObject *__pyx_pw_8pysndlib_3clm_287make_one_pole(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  double __pyx_v_a0;
  double __pyx_v_b1;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("make_one_pole (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_a0,&__pyx_n_s_b1,0};
    PyObject* values[2] = {0,0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_a0)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 2733, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_b1)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 2733, __pyx_L3_error)
        else {
          __Pyx_RaiseArgtupleInvalid("make_one_pole", 1, 2, 2, 1); __PYX_ERR(0, 2733, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "make_one_pole") < 0)) __PYX_ERR(0, 2733, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 2)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
      values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
    }
    __pyx_v_a0 = __pyx_PyFloat_AsDouble(values[0]); if (unlikely((__pyx_v_a0 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 2733, __pyx_L3_error)
    __pyx_v_b1 = __pyx_PyFloat_AsDouble(values[1]); if (unlikely((__pyx_v_b1 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 2733, __pyx_L3_error)
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("make_one_pole", 1, 2, 2, __pyx_nargs); __PYX_ERR(0, 2733, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.make_one_pole", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pysndlib_3clm_286make_one_pole(__pyx_self, __pyx_v_a0, __pyx_v_b1);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_286make_one_pole(CYTHON_UNUSED PyObject *__pyx_self, double __pyx_v_a0, double __pyx_v_b1) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("make_one_pole", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = ((PyObject *)__pyx_f_8pysndlib_3clm_make_one_pole(__pyx_v_a0, __pyx_v_b1, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2733, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pysndlib.clm.make_one_pole", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__348 = PyTuple_Pack(2, __pyx_n_s_a0, __pyx_n_s_b1); if (unlikely(!__pyx_tuple__348)) __PYX_ERR(0, 2733, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__348);
  __Pyx_GIVEREF(__pyx_tuple__348);
/* … */
  __pyx_t_41 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 2733, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  if (PyDict_SetItem(__pyx_t_41, __pyx_n_s_a0, __pyx_kp_s_cython_double) < 0) __PYX_ERR(0, 2733, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_41, __pyx_n_s_b1, __pyx_kp_s_cython_double) < 0) __PYX_ERR(0, 2733, __pyx_L1_error)
  __pyx_t_40 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_287make_one_pole, 0, __pyx_n_s_make_one_pole, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__349)); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 2733, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_40, __pyx_t_41);
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_make_one_pole, __pyx_t_40) < 0) __PYX_ERR(0, 2733, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
  __pyx_codeobj__349 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__348, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_make_one_pole, 2733, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__349)) __PYX_ERR(0, 2733, __pyx_L1_error)
 2734:     """
 2735:     return a new one_pole filter: y(n) = a0 x(n) - b1 y(n-1)
 2736:     b1 < 0.0 gives lowpass, b1 > 0.0 gives highpass.
 2737:     
 2738:     :param a0: coefficient
 2739:     :param b1: coefficient
 2740:     :return: one_pole gen
 2741:     :rtype: mus_any
 2742:     """
 2743: 
+2744:     return mus_any.from_ptr(cclm.mus_make_one_pole(a0, b1))
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __pyx_t_1 = ((PyObject *)__pyx_vtabptr_8pysndlib_3clm_mus_any->from_ptr(mus_make_one_pole(__pyx_v_a0, __pyx_v_b1), NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2744, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)__pyx_t_1);
  __pyx_t_1 = 0;
  goto __pyx_L0;
 2745: 
 2746: 
 2747: 
+2748: cpdef cython.double one_pole(gen: mus_any, insig: float):
static PyObject *__pyx_pw_8pysndlib_3clm_289one_pole(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static double __pyx_f_8pysndlib_3clm_one_pole(struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen, double __pyx_v_insig, CYTHON_UNUSED int __pyx_skip_dispatch) {
  double __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("one_pole", 0);
/* … */
  /* function exit code */
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_289one_pole(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_288one_pole, "\n    one pole filter of input.\n    \n    :param gen: one_pole gen\n    :param insig: input \n    :rtype: float\n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_289one_pole = {"one_pole", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_289one_pole, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_288one_pole};
static PyObject *__pyx_pw_8pysndlib_3clm_289one_pole(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen = 0;
  double __pyx_v_insig;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("one_pole (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_gen,&__pyx_n_s_insig,0};
    PyObject* values[2] = {0,0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_gen)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 2748, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_insig)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 2748, __pyx_L3_error)
        else {
          __Pyx_RaiseArgtupleInvalid("one_pole", 1, 2, 2, 1); __PYX_ERR(0, 2748, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "one_pole") < 0)) __PYX_ERR(0, 2748, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 2)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
      values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
    }
    __pyx_v_gen = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)values[0]);
    __pyx_v_insig = __pyx_PyFloat_AsDouble(values[1]); if (unlikely((__pyx_v_insig == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 2748, __pyx_L3_error)
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("one_pole", 1, 2, 2, __pyx_nargs); __PYX_ERR(0, 2748, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.one_pole", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_gen), __pyx_ptype_8pysndlib_3clm_mus_any, 0, "gen", 0))) __PYX_ERR(0, 2748, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pysndlib_3clm_288one_pole(__pyx_self, __pyx_v_gen, __pyx_v_insig);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_288one_pole(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen, double __pyx_v_insig) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("one_pole", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_8pysndlib_3clm_one_pole(__pyx_v_gen, __pyx_v_insig, 0); if (unlikely(__pyx_t_1 == ((double)-1) && PyErr_Occurred())) __PYX_ERR(0, 2748, __pyx_L1_error)
  __pyx_t_2 = PyFloat_FromDouble(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2748, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pysndlib.clm.one_pole", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__350 = PyTuple_Pack(2, __pyx_n_s_gen, __pyx_n_s_insig); if (unlikely(!__pyx_tuple__350)) __PYX_ERR(0, 2748, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__350);
  __Pyx_GIVEREF(__pyx_tuple__350);
/* … */
  __pyx_t_40 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 2748, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  if (PyDict_SetItem(__pyx_t_40, __pyx_n_s_gen, __pyx_n_s_mus_any) < 0) __PYX_ERR(0, 2748, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_40, __pyx_n_s_insig, __pyx_n_s_float) < 0) __PYX_ERR(0, 2748, __pyx_L1_error)
  __pyx_t_41 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_289one_pole, 0, __pyx_n_s_one_pole, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__351)); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 2748, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_41, __pyx_t_40);
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_one_pole, __pyx_t_41) < 0) __PYX_ERR(0, 2748, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
  __pyx_codeobj__351 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__350, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_one_pole, 2748, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__351)) __PYX_ERR(0, 2748, __pyx_L1_error)
 2749:     """
 2750:     one pole filter of input.
 2751:     
 2752:     :param gen: one_pole gen
 2753:     :param insig: input 
 2754:     :rtype: float
 2755:     """
 2756: 
+2757:     return cclm.mus_one_pole(gen._ptr, insig)
  __pyx_r = mus_one_pole(__pyx_v_gen->_ptr, __pyx_v_insig);
  goto __pyx_L0;
 2758: 
+2759: cpdef bint is_one_pole(gen: mus_any):
static PyObject *__pyx_pw_8pysndlib_3clm_291is_one_pole(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static int __pyx_f_8pysndlib_3clm_is_one_pole(struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen, CYTHON_UNUSED int __pyx_skip_dispatch) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_one_pole", 0);
/* … */
  /* function exit code */
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_291is_one_pole(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_290is_one_pole, "\n    returns True if gen is a one_pole.\n    \n    :param gen: gen\n    :rtype: bool\n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_291is_one_pole = {"is_one_pole", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_291is_one_pole, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_290is_one_pole};
static PyObject *__pyx_pw_8pysndlib_3clm_291is_one_pole(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_one_pole (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_gen,0};
    PyObject* values[1] = {0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_gen)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 2759, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "is_one_pole") < 0)) __PYX_ERR(0, 2759, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
    }
    __pyx_v_gen = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)values[0]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("is_one_pole", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 2759, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.is_one_pole", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_gen), __pyx_ptype_8pysndlib_3clm_mus_any, 0, "gen", 0))) __PYX_ERR(0, 2759, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pysndlib_3clm_290is_one_pole(__pyx_self, __pyx_v_gen);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_290is_one_pole(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_one_pole", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_8pysndlib_3clm_is_one_pole(__pyx_v_gen, 0); if (unlikely(__pyx_t_1 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 2759, __pyx_L1_error)
  __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2759, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pysndlib.clm.is_one_pole", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_41 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 2759, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  if (PyDict_SetItem(__pyx_t_41, __pyx_n_s_gen, __pyx_n_s_mus_any) < 0) __PYX_ERR(0, 2759, __pyx_L1_error)
  __pyx_t_40 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_291is_one_pole, 0, __pyx_n_s_is_one_pole, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__352)); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 2759, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_40, __pyx_t_41);
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_is_one_pole, __pyx_t_40) < 0) __PYX_ERR(0, 2759, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
/* … */
  __pyx_codeobj__352 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__46, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_is_one_pole, 2759, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__352)) __PYX_ERR(0, 2759, __pyx_L1_error)
 2760:     """
 2761:     returns True if gen is a one_pole.
 2762:     
 2763:     :param gen: gen
 2764:     :rtype: bool
 2765:     """
+2766:     return cclm.mus_is_one_pole(gen._ptr)
  __pyx_r = mus_is_one_pole(__pyx_v_gen->_ptr);
  goto __pyx_L0;
 2767: 
 2768: 
+2769: cpdef mus_any make_one_zero(a0: float, a1: float):
static PyObject *__pyx_pw_8pysndlib_3clm_293make_one_zero(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_f_8pysndlib_3clm_make_one_zero(double __pyx_v_a0, double __pyx_v_a1, CYTHON_UNUSED int __pyx_skip_dispatch) {
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("make_one_zero", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pysndlib.clm.make_one_zero", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_293make_one_zero(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_292make_one_zero, "\n    return a new one_zero filter: y(n) = a0 x(n) + a1 x(n-1)\n    a1 > 0.0 gives weak lowpass, a1 < 0.0 highpass.\n    \n    :param a0: coefficient\n    :param a1: coefficient\n    :return: one_pole gen\n    :rtype: mus_any\n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_293make_one_zero = {"make_one_zero", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_293make_one_zero, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_292make_one_zero};
static PyObject *__pyx_pw_8pysndlib_3clm_293make_one_zero(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  double __pyx_v_a0;
  double __pyx_v_a1;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("make_one_zero (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_a0,&__pyx_n_s_a1,0};
    PyObject* values[2] = {0,0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_a0)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 2769, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_a1)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 2769, __pyx_L3_error)
        else {
          __Pyx_RaiseArgtupleInvalid("make_one_zero", 1, 2, 2, 1); __PYX_ERR(0, 2769, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "make_one_zero") < 0)) __PYX_ERR(0, 2769, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 2)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
      values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
    }
    __pyx_v_a0 = __pyx_PyFloat_AsDouble(values[0]); if (unlikely((__pyx_v_a0 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 2769, __pyx_L3_error)
    __pyx_v_a1 = __pyx_PyFloat_AsDouble(values[1]); if (unlikely((__pyx_v_a1 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 2769, __pyx_L3_error)
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("make_one_zero", 1, 2, 2, __pyx_nargs); __PYX_ERR(0, 2769, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.make_one_zero", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pysndlib_3clm_292make_one_zero(__pyx_self, __pyx_v_a0, __pyx_v_a1);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_292make_one_zero(CYTHON_UNUSED PyObject *__pyx_self, double __pyx_v_a0, double __pyx_v_a1) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("make_one_zero", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = ((PyObject *)__pyx_f_8pysndlib_3clm_make_one_zero(__pyx_v_a0, __pyx_v_a1, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2769, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pysndlib.clm.make_one_zero", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__353 = PyTuple_Pack(2, __pyx_n_s_a0, __pyx_n_s_a1); if (unlikely(!__pyx_tuple__353)) __PYX_ERR(0, 2769, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__353);
  __Pyx_GIVEREF(__pyx_tuple__353);
/* … */
  __pyx_t_40 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 2769, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  if (PyDict_SetItem(__pyx_t_40, __pyx_n_s_a0, __pyx_n_s_float) < 0) __PYX_ERR(0, 2769, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_40, __pyx_n_s_a1, __pyx_n_s_float) < 0) __PYX_ERR(0, 2769, __pyx_L1_error)
  __pyx_t_41 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_293make_one_zero, 0, __pyx_n_s_make_one_zero, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__354)); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 2769, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_41, __pyx_t_40);
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_make_one_zero, __pyx_t_41) < 0) __PYX_ERR(0, 2769, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
  __pyx_codeobj__354 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__353, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_make_one_zero, 2769, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__354)) __PYX_ERR(0, 2769, __pyx_L1_error)
 2770:     """
 2771:     return a new one_zero filter: y(n) = a0 x(n) + a1 x(n-1)
 2772:     a1 > 0.0 gives weak lowpass, a1 < 0.0 highpass.
 2773:     
 2774:     :param a0: coefficient
 2775:     :param a1: coefficient
 2776:     :return: one_pole gen
 2777:     :rtype: mus_any
 2778:     """
+2779:     return mus_any.from_ptr(cclm.mus_make_one_zero(a0, a1))
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __pyx_t_1 = ((PyObject *)__pyx_vtabptr_8pysndlib_3clm_mus_any->from_ptr(mus_make_one_zero(__pyx_v_a0, __pyx_v_a1), NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2779, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)__pyx_t_1);
  __pyx_t_1 = 0;
  goto __pyx_L0;
 2780: 
+2781: cpdef cython.double one_zero(gen: mus_any, insig: float):
static PyObject *__pyx_pw_8pysndlib_3clm_295one_zero(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static double __pyx_f_8pysndlib_3clm_one_zero(struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen, double __pyx_v_insig, CYTHON_UNUSED int __pyx_skip_dispatch) {
  double __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("one_zero", 0);
/* … */
  /* function exit code */
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_295one_zero(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_294one_zero, "\n    one zero filter of input.\n    \n    :param gen: one_zero gen\n    :param insig: input \n    :rtype: float\n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_295one_zero = {"one_zero", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_295one_zero, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_294one_zero};
static PyObject *__pyx_pw_8pysndlib_3clm_295one_zero(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen = 0;
  double __pyx_v_insig;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("one_zero (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_gen,&__pyx_n_s_insig,0};
    PyObject* values[2] = {0,0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_gen)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 2781, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_insig)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 2781, __pyx_L3_error)
        else {
          __Pyx_RaiseArgtupleInvalid("one_zero", 1, 2, 2, 1); __PYX_ERR(0, 2781, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "one_zero") < 0)) __PYX_ERR(0, 2781, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 2)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
      values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
    }
    __pyx_v_gen = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)values[0]);
    __pyx_v_insig = __pyx_PyFloat_AsDouble(values[1]); if (unlikely((__pyx_v_insig == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 2781, __pyx_L3_error)
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("one_zero", 1, 2, 2, __pyx_nargs); __PYX_ERR(0, 2781, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.one_zero", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_gen), __pyx_ptype_8pysndlib_3clm_mus_any, 0, "gen", 0))) __PYX_ERR(0, 2781, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pysndlib_3clm_294one_zero(__pyx_self, __pyx_v_gen, __pyx_v_insig);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_294one_zero(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen, double __pyx_v_insig) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("one_zero", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_8pysndlib_3clm_one_zero(__pyx_v_gen, __pyx_v_insig, 0); if (unlikely(__pyx_t_1 == ((double)-1) && PyErr_Occurred())) __PYX_ERR(0, 2781, __pyx_L1_error)
  __pyx_t_2 = PyFloat_FromDouble(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2781, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pysndlib.clm.one_zero", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_41 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 2781, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  if (PyDict_SetItem(__pyx_t_41, __pyx_n_s_gen, __pyx_n_s_mus_any) < 0) __PYX_ERR(0, 2781, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_41, __pyx_n_s_insig, __pyx_n_s_float) < 0) __PYX_ERR(0, 2781, __pyx_L1_error)
  __pyx_t_40 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_295one_zero, 0, __pyx_n_s_one_zero, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__355)); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 2781, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_40, __pyx_t_41);
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_one_zero, __pyx_t_40) < 0) __PYX_ERR(0, 2781, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
/* … */
  __pyx_codeobj__355 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__350, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_one_zero, 2781, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__355)) __PYX_ERR(0, 2781, __pyx_L1_error)
 2782:     """
 2783:     one zero filter of input.
 2784:     
 2785:     :param gen: one_zero gen
 2786:     :param insig: input 
 2787:     :rtype: float
 2788:     """
+2789:     return cclm.mus_one_zero(gen._ptr, insig)
  __pyx_r = mus_one_zero(__pyx_v_gen->_ptr, __pyx_v_insig);
  goto __pyx_L0;
 2790: 
+2791: cpdef bint is_one_zero(gen: mus_any):
static PyObject *__pyx_pw_8pysndlib_3clm_297is_one_zero(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static int __pyx_f_8pysndlib_3clm_is_one_zero(struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen, CYTHON_UNUSED int __pyx_skip_dispatch) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_one_zero", 0);
/* … */
  /* function exit code */
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_297is_one_zero(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_296is_one_zero, "\n    returns True if gen is a one_zero.\n    \n    :param gen: gen\n    :rtype: bool\n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_297is_one_zero = {"is_one_zero", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_297is_one_zero, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_296is_one_zero};
static PyObject *__pyx_pw_8pysndlib_3clm_297is_one_zero(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_one_zero (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_gen,0};
    PyObject* values[1] = {0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_gen)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 2791, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "is_one_zero") < 0)) __PYX_ERR(0, 2791, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
    }
    __pyx_v_gen = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)values[0]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("is_one_zero", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 2791, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.is_one_zero", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_gen), __pyx_ptype_8pysndlib_3clm_mus_any, 0, "gen", 0))) __PYX_ERR(0, 2791, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pysndlib_3clm_296is_one_zero(__pyx_self, __pyx_v_gen);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_296is_one_zero(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_one_zero", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_8pysndlib_3clm_is_one_zero(__pyx_v_gen, 0); if (unlikely(__pyx_t_1 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 2791, __pyx_L1_error)
  __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2791, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pysndlib.clm.is_one_zero", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_40 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 2791, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  if (PyDict_SetItem(__pyx_t_40, __pyx_n_s_gen, __pyx_n_s_mus_any) < 0) __PYX_ERR(0, 2791, __pyx_L1_error)
  __pyx_t_41 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_297is_one_zero, 0, __pyx_n_s_is_one_zero, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__356)); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 2791, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_41, __pyx_t_40);
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_is_one_zero, __pyx_t_41) < 0) __PYX_ERR(0, 2791, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
/* … */
  __pyx_codeobj__356 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__46, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_is_one_zero, 2791, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__356)) __PYX_ERR(0, 2791, __pyx_L1_error)
 2792:     """
 2793:     returns True if gen is a one_zero.
 2794:     
 2795:     :param gen: gen
 2796:     :rtype: bool
 2797:     """
+2798:     return cclm.mus_is_one_zero(gen._ptr)
  __pyx_r = mus_is_one_zero(__pyx_v_gen->_ptr);
  goto __pyx_L0;
 2799: 
 2800: # make def for *args. are there other ways
+2801: def make_two_pole(frequency: [Optional]=None, radius: [Optional]=None, **kwargs):
/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_299make_two_pole(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_298make_two_pole, "\n    return a new two_pole filter: y(n) = a0 x(n) - b1 y(n-1) - b2 y(n-2).\n    \n    :param frequency: Center frequency \\in Hz\n    :param radius: Radius of filter. Refers to the unit circle, so it should be between 0.0 and (less than) 1.0. \n    :param kwargs: If frequency and radius not provided, these should be keyword arguments 'a0', 'b1', 'b2'\n    :return: two_pole gen\n    :rtype: mus_any\n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_299make_two_pole = {"make_two_pole", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_299make_two_pole, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_298make_two_pole};
static PyObject *__pyx_pw_8pysndlib_3clm_299make_two_pole(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_frequency = 0;
  PyObject *__pyx_v_radius = 0;
  PyObject *__pyx_v_kwargs = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("make_two_pole (wrapper)", 0);
  __pyx_v_kwargs = PyDict_New(); if (unlikely(!__pyx_v_kwargs)) return NULL;
  __Pyx_GOTREF(__pyx_v_kwargs);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_frequency,&__pyx_n_s_radius,0};
    PyObject* values[2] = {0,0};
    values[0] = ((PyObject *)((PyObject *)Py_None));
    values[1] = ((PyObject *)((PyObject *)Py_None));
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_frequency);
          if (value) { values[0] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 2801, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_radius);
          if (value) { values[1] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 2801, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, __pyx_v_kwargs, values + 0, kwd_pos_args, "make_two_pole") < 0)) __PYX_ERR(0, 2801, __pyx_L3_error)
      }
    } else {
      switch (__pyx_nargs) {
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_frequency = values[0];
    __pyx_v_radius = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("make_two_pole", 0, 0, 2, __pyx_nargs); __PYX_ERR(0, 2801, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_DECREF(__pyx_v_kwargs); __pyx_v_kwargs = 0;
  __Pyx_AddTraceback("pysndlib.clm.make_two_pole", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pysndlib_3clm_298make_two_pole(__pyx_self, __pyx_v_frequency, __pyx_v_radius, __pyx_v_kwargs);

  /* function exit code */
  __Pyx_DECREF(__pyx_v_kwargs);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_298make_two_pole(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_frequency, PyObject *__pyx_v_radius, PyObject *__pyx_v_kwargs) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("make_two_pole", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("pysndlib.clm.make_two_pole", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__357 = PyTuple_Pack(3, __pyx_n_s_frequency, __pyx_n_s_radius, __pyx_n_s_kwargs); if (unlikely(!__pyx_tuple__357)) __PYX_ERR(0, 2801, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__357);
  __Pyx_GIVEREF(__pyx_tuple__357);
  __pyx_codeobj__358 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS|CO_VARKEYWORDS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__357, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_make_two_pole, 2801, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__358)) __PYX_ERR(0, 2801, __pyx_L1_error)
/* … */
  __pyx_t_41 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 2801, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  if (PyDict_SetItem(__pyx_t_41, __pyx_n_s_frequency, __pyx_kp_s_Optional) < 0) __PYX_ERR(0, 2801, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_41, __pyx_n_s_radius, __pyx_kp_s_Optional) < 0) __PYX_ERR(0, 2801, __pyx_L1_error)
  __pyx_t_40 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_299make_two_pole, 0, __pyx_n_s_make_two_pole, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__358)); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 2801, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_40, __pyx_tuple__359);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_40, __pyx_t_41);
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_make_two_pole, __pyx_t_40) < 0) __PYX_ERR(0, 2801, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
  __pyx_tuple__359 = PyTuple_Pack(2, ((PyObject *)Py_None), ((PyObject *)Py_None)); if (unlikely(!__pyx_tuple__359)) __PYX_ERR(0, 2801, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__359);
  __Pyx_GIVEREF(__pyx_tuple__359);
 2802:     """
 2803:     return a new two_pole filter: y(n) = a0 x(n) - b1 y(n-1) - b2 y(n-2).
 2804:     
 2805:     :param frequency: Center frequency \in Hz
 2806:     :param radius: Radius of filter. Refers to the unit circle, so it should be between 0.0 and (less than) 1.0. 
 2807:     :param kwargs: If frequency and radius not provided, these should be keyword arguments 'a0', 'b1', 'b2'
 2808:     :return: two_pole gen
 2809:     :rtype: mus_any
 2810:     """
 2811: 
+2812:     if kwargs:
  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_kwargs); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 2812, __pyx_L1_error)
  if (__pyx_t_1) {
/* … */
  }
+2813:         if 'a0' in kwargs and 'b1' in kwargs and 'b2' in kwargs:
    __pyx_t_2 = (__Pyx_PyDict_ContainsTF(__pyx_n_s_a0, __pyx_v_kwargs, Py_EQ)); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 2813, __pyx_L1_error)
    if (__pyx_t_2) {
    } else {
      __pyx_t_1 = __pyx_t_2;
      goto __pyx_L5_bool_binop_done;
    }
    __pyx_t_2 = (__Pyx_PyDict_ContainsTF(__pyx_n_s_b1, __pyx_v_kwargs, Py_EQ)); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 2813, __pyx_L1_error)
    if (__pyx_t_2) {
    } else {
      __pyx_t_1 = __pyx_t_2;
      goto __pyx_L5_bool_binop_done;
    }
    __pyx_t_2 = (__Pyx_PyDict_ContainsTF(__pyx_n_s_b2, __pyx_v_kwargs, Py_EQ)); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 2813, __pyx_L1_error)
    __pyx_t_1 = __pyx_t_2;
    __pyx_L5_bool_binop_done:;
    if (likely(__pyx_t_1)) {
/* … */
    }
+2814:             return mus_any.from_ptr(cclm.mus_make_two_pole(kwargs.get('a0'), kwargs.get('b1'), kwargs.get('b2')))
      __Pyx_XDECREF(__pyx_r);
      __pyx_t_3 = __Pyx_PyDict_GetItemDefault(__pyx_v_kwargs, __pyx_n_s_a0, Py_None); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2814, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_4 = __pyx_PyFloat_AsDouble(__pyx_t_3); if (unlikely((__pyx_t_4 == ((mus_float_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 2814, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __pyx_t_3 = __Pyx_PyDict_GetItemDefault(__pyx_v_kwargs, __pyx_n_s_b1, Py_None); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2814, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_5 = __pyx_PyFloat_AsDouble(__pyx_t_3); if (unlikely((__pyx_t_5 == ((mus_float_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 2814, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __pyx_t_3 = __Pyx_PyDict_GetItemDefault(__pyx_v_kwargs, __pyx_n_s_b2, Py_None); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2814, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_6 = __pyx_PyFloat_AsDouble(__pyx_t_3); if (unlikely((__pyx_t_6 == ((mus_float_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 2814, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __pyx_t_3 = ((PyObject *)__pyx_vtabptr_8pysndlib_3clm_mus_any->from_ptr(mus_make_two_pole(__pyx_t_4, __pyx_t_5, __pyx_t_6), NULL)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2814, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_r = __pyx_t_3;
      __pyx_t_3 = 0;
      goto __pyx_L0;
 2815:         else:
+2816:             raise KeyError(f'Filter needs values for a0, b1, b2')
    /*else*/ {
      __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_KeyError, __pyx_tuple__29, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2816, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_Raise(__pyx_t_3, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __PYX_ERR(0, 2816, __pyx_L1_error)
    }
/* … */
  __pyx_tuple__29 = PyTuple_Pack(1, __pyx_kp_u_Filter_needs_values_for_a0_b1_b2); if (unlikely(!__pyx_tuple__29)) __PYX_ERR(0, 2816, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__29);
  __Pyx_GIVEREF(__pyx_tuple__29);
 2817: 
 2818:     else:
+2819:         if frequency is not None and radius is not None:
  /*else*/ {
    __pyx_t_2 = (__pyx_v_frequency != Py_None);
    if (__pyx_t_2) {
    } else {
      __pyx_t_1 = __pyx_t_2;
      goto __pyx_L9_bool_binop_done;
    }
    __pyx_t_2 = (__pyx_v_radius != Py_None);
    __pyx_t_1 = __pyx_t_2;
    __pyx_L9_bool_binop_done:;
    if (likely(__pyx_t_1)) {
/* … */
    }
+2820:             return mus_any.from_ptr(cclm.mus_make_two_pole_from_frequency_and_radius(frequency, radius))
      __Pyx_XDECREF(__pyx_r);
      __pyx_t_6 = __pyx_PyFloat_AsDouble(__pyx_v_frequency); if (unlikely((__pyx_t_6 == ((mus_float_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 2820, __pyx_L1_error)
      __pyx_t_5 = __pyx_PyFloat_AsDouble(__pyx_v_radius); if (unlikely((__pyx_t_5 == ((mus_float_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 2820, __pyx_L1_error)
      __pyx_t_3 = ((PyObject *)__pyx_vtabptr_8pysndlib_3clm_mus_any->from_ptr(mus_make_two_pole_from_frequency_and_radius(__pyx_t_6, __pyx_t_5), NULL)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2820, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_r = __pyx_t_3;
      __pyx_t_3 = 0;
      goto __pyx_L0;
 2821:         else:
+2822:             raise RuntimeError("If not specifying coeffs, must provide frequency and radius.")
    /*else*/ {
      __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_RuntimeError, __pyx_tuple__30, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2822, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_Raise(__pyx_t_3, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __PYX_ERR(0, 2822, __pyx_L1_error)
    }
  }
/* … */
  __pyx_tuple__30 = PyTuple_Pack(1, __pyx_kp_s_If_not_specifying_coeffs_must_pr); if (unlikely(!__pyx_tuple__30)) __PYX_ERR(0, 2822, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__30);
  __Pyx_GIVEREF(__pyx_tuple__30);
 2823: 
+2824: cpdef cython.double two_pole(gen: mus_any, insig: float):
static PyObject *__pyx_pw_8pysndlib_3clm_301two_pole(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static double __pyx_f_8pysndlib_3clm_two_pole(struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen, double __pyx_v_insig, CYTHON_UNUSED int __pyx_skip_dispatch) {
  double __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("two_pole", 0);
/* … */
  /* function exit code */
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_301two_pole(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_300two_pole, "\n    two pole filter of input.\n    \n    :param gen: two_pole gen\n    :param insig: input \n    :rtype: float  \n    \n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_301two_pole = {"two_pole", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_301two_pole, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_300two_pole};
static PyObject *__pyx_pw_8pysndlib_3clm_301two_pole(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen = 0;
  double __pyx_v_insig;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("two_pole (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_gen,&__pyx_n_s_insig,0};
    PyObject* values[2] = {0,0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_gen)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 2824, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_insig)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 2824, __pyx_L3_error)
        else {
          __Pyx_RaiseArgtupleInvalid("two_pole", 1, 2, 2, 1); __PYX_ERR(0, 2824, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "two_pole") < 0)) __PYX_ERR(0, 2824, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 2)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
      values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
    }
    __pyx_v_gen = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)values[0]);
    __pyx_v_insig = __pyx_PyFloat_AsDouble(values[1]); if (unlikely((__pyx_v_insig == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 2824, __pyx_L3_error)
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("two_pole", 1, 2, 2, __pyx_nargs); __PYX_ERR(0, 2824, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.two_pole", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_gen), __pyx_ptype_8pysndlib_3clm_mus_any, 0, "gen", 0))) __PYX_ERR(0, 2824, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pysndlib_3clm_300two_pole(__pyx_self, __pyx_v_gen, __pyx_v_insig);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_300two_pole(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen, double __pyx_v_insig) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("two_pole", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_8pysndlib_3clm_two_pole(__pyx_v_gen, __pyx_v_insig, 0); if (unlikely(__pyx_t_1 == ((double)-1) && PyErr_Occurred())) __PYX_ERR(0, 2824, __pyx_L1_error)
  __pyx_t_2 = PyFloat_FromDouble(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2824, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pysndlib.clm.two_pole", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_40 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 2824, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  if (PyDict_SetItem(__pyx_t_40, __pyx_n_s_gen, __pyx_n_s_mus_any) < 0) __PYX_ERR(0, 2824, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_40, __pyx_n_s_insig, __pyx_n_s_float) < 0) __PYX_ERR(0, 2824, __pyx_L1_error)
  __pyx_t_41 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_301two_pole, 0, __pyx_n_s_two_pole, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__360)); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 2824, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_41, __pyx_t_40);
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_two_pole, __pyx_t_41) < 0) __PYX_ERR(0, 2824, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
/* … */
  __pyx_codeobj__360 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__350, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_two_pole, 2824, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__360)) __PYX_ERR(0, 2824, __pyx_L1_error)
 2825:     """
 2826:     two pole filter of input.
 2827:     
 2828:     :param gen: two_pole gen
 2829:     :param insig: input 
 2830:     :rtype: float  
 2831:     
 2832:     """
+2833:     return cclm.mus_two_pole(gen._ptr, insig)
  __pyx_r = mus_two_pole(__pyx_v_gen->_ptr, __pyx_v_insig);
  goto __pyx_L0;
 2834: 
+2835: cpdef bint is_two_pole(gen: mus_any):
static PyObject *__pyx_pw_8pysndlib_3clm_303is_two_pole(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static int __pyx_f_8pysndlib_3clm_is_two_pole(struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen, CYTHON_UNUSED int __pyx_skip_dispatch) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_two_pole", 0);
/* … */
  /* function exit code */
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_303is_two_pole(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_302is_two_pole, "\n    returns True if gen is a two_pole.\n    \n    :param gen: gen\n    :rtype: bool\n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_303is_two_pole = {"is_two_pole", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_303is_two_pole, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_302is_two_pole};
static PyObject *__pyx_pw_8pysndlib_3clm_303is_two_pole(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_two_pole (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_gen,0};
    PyObject* values[1] = {0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_gen)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 2835, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "is_two_pole") < 0)) __PYX_ERR(0, 2835, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
    }
    __pyx_v_gen = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)values[0]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("is_two_pole", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 2835, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.is_two_pole", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_gen), __pyx_ptype_8pysndlib_3clm_mus_any, 0, "gen", 0))) __PYX_ERR(0, 2835, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pysndlib_3clm_302is_two_pole(__pyx_self, __pyx_v_gen);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_302is_two_pole(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_two_pole", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_8pysndlib_3clm_is_two_pole(__pyx_v_gen, 0); if (unlikely(__pyx_t_1 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 2835, __pyx_L1_error)
  __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2835, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pysndlib.clm.is_two_pole", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_41 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 2835, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  if (PyDict_SetItem(__pyx_t_41, __pyx_n_s_gen, __pyx_n_s_mus_any) < 0) __PYX_ERR(0, 2835, __pyx_L1_error)
  __pyx_t_40 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_303is_two_pole, 0, __pyx_n_s_is_two_pole, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__361)); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 2835, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_40, __pyx_t_41);
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_is_two_pole, __pyx_t_40) < 0) __PYX_ERR(0, 2835, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
/* … */
  __pyx_codeobj__361 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__46, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_is_two_pole, 2835, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__361)) __PYX_ERR(0, 2835, __pyx_L1_error)
 2836:     """
 2837:     returns True if gen is a two_pole.
 2838:     
 2839:     :param gen: gen
 2840:     :rtype: bool
 2841:     """
+2842:     return cclm.mus_is_two_pole(gen._ptr)
  __pyx_r = mus_is_two_pole(__pyx_v_gen->_ptr);
  goto __pyx_L0;
 2843: 
 2844: # make def for *args. are there other ways
+2845: def make_two_zero(frequency: [Optional]=None, radius: [Optional]=None, **kwargs):
/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_305make_two_zero(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_304make_two_zero, "\n    return a new two_zero filter: y(n) = a0 x(n) + a1 x(n-1) + a2 x(n-2).\n    \n    :param frequency: Center frequency \\in Hz\n    :param radius: Radius of filter. Refers to the unit circle, so it should be between 0.0 and (less than) 1.0. \n    :param kwargs: If frequency and radius not provided, these should be keyword arguments 'a0', 'a1', 'a2'\n    :return: two_zero gen\n    :rtype: mus_any\n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_305make_two_zero = {"make_two_zero", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_305make_two_zero, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_304make_two_zero};
static PyObject *__pyx_pw_8pysndlib_3clm_305make_two_zero(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_frequency = 0;
  PyObject *__pyx_v_radius = 0;
  PyObject *__pyx_v_kwargs = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("make_two_zero (wrapper)", 0);
  __pyx_v_kwargs = PyDict_New(); if (unlikely(!__pyx_v_kwargs)) return NULL;
  __Pyx_GOTREF(__pyx_v_kwargs);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_frequency,&__pyx_n_s_radius,0};
    PyObject* values[2] = {0,0};
    values[0] = ((PyObject *)((PyObject *)Py_None));
    values[1] = ((PyObject *)((PyObject *)Py_None));
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_frequency);
          if (value) { values[0] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 2845, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_radius);
          if (value) { values[1] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 2845, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, __pyx_v_kwargs, values + 0, kwd_pos_args, "make_two_zero") < 0)) __PYX_ERR(0, 2845, __pyx_L3_error)
      }
    } else {
      switch (__pyx_nargs) {
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_frequency = values[0];
    __pyx_v_radius = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("make_two_zero", 0, 0, 2, __pyx_nargs); __PYX_ERR(0, 2845, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_DECREF(__pyx_v_kwargs); __pyx_v_kwargs = 0;
  __Pyx_AddTraceback("pysndlib.clm.make_two_zero", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pysndlib_3clm_304make_two_zero(__pyx_self, __pyx_v_frequency, __pyx_v_radius, __pyx_v_kwargs);

  /* function exit code */
  __Pyx_DECREF(__pyx_v_kwargs);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_304make_two_zero(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_frequency, PyObject *__pyx_v_radius, PyObject *__pyx_v_kwargs) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("make_two_zero", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("pysndlib.clm.make_two_zero", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_codeobj__362 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS|CO_VARKEYWORDS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__357, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_make_two_zero, 2845, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__362)) __PYX_ERR(0, 2845, __pyx_L1_error)
/* … */
  __pyx_t_40 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 2845, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  if (PyDict_SetItem(__pyx_t_40, __pyx_n_s_frequency, __pyx_kp_s_Optional) < 0) __PYX_ERR(0, 2845, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_40, __pyx_n_s_radius, __pyx_kp_s_Optional) < 0) __PYX_ERR(0, 2845, __pyx_L1_error)
  __pyx_t_41 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_305make_two_zero, 0, __pyx_n_s_make_two_zero, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__362)); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 2845, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_41, __pyx_tuple__363);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_41, __pyx_t_40);
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_make_two_zero, __pyx_t_41) < 0) __PYX_ERR(0, 2845, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
  __pyx_tuple__363 = PyTuple_Pack(2, ((PyObject *)Py_None), ((PyObject *)Py_None)); if (unlikely(!__pyx_tuple__363)) __PYX_ERR(0, 2845, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__363);
  __Pyx_GIVEREF(__pyx_tuple__363);
 2846:     """
 2847:     return a new two_zero filter: y(n) = a0 x(n) + a1 x(n-1) + a2 x(n-2).
 2848:     
 2849:     :param frequency: Center frequency \in Hz
 2850:     :param radius: Radius of filter. Refers to the unit circle, so it should be between 0.0 and (less than) 1.0. 
 2851:     :param kwargs: If frequency and radius not provided, these should be keyword arguments 'a0', 'a1', 'a2'
 2852:     :return: two_zero gen
 2853:     :rtype: mus_any
 2854:     """
 2855: 
+2856:     if kwargs:
  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_kwargs); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 2856, __pyx_L1_error)
  if (__pyx_t_1) {
/* … */
  }
+2857:         if 'a0' in kwargs and 'a1' in kwargs and 'a1' in kwargs:
    __pyx_t_2 = (__Pyx_PyDict_ContainsTF(__pyx_n_s_a0, __pyx_v_kwargs, Py_EQ)); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 2857, __pyx_L1_error)
    if (__pyx_t_2) {
    } else {
      __pyx_t_1 = __pyx_t_2;
      goto __pyx_L5_bool_binop_done;
    }
    __pyx_t_2 = (__Pyx_PyDict_ContainsTF(__pyx_n_s_a1, __pyx_v_kwargs, Py_EQ)); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 2857, __pyx_L1_error)
    if (__pyx_t_2) {
    } else {
      __pyx_t_1 = __pyx_t_2;
      goto __pyx_L5_bool_binop_done;
    }
    __pyx_t_2 = (__Pyx_PyDict_ContainsTF(__pyx_n_s_a1, __pyx_v_kwargs, Py_EQ)); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 2857, __pyx_L1_error)
    __pyx_t_1 = __pyx_t_2;
    __pyx_L5_bool_binop_done:;
    if (likely(__pyx_t_1)) {
/* … */
    }
+2858:             return mus_any.from_ptr(cclm.mus_make_two_zero(kwargs.get('a0'), kwargs.get('a1'), kwargs.get('a2')))
      __Pyx_XDECREF(__pyx_r);
      __pyx_t_3 = __Pyx_PyDict_GetItemDefault(__pyx_v_kwargs, __pyx_n_s_a0, Py_None); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2858, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_4 = __pyx_PyFloat_AsDouble(__pyx_t_3); if (unlikely((__pyx_t_4 == ((mus_float_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 2858, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __pyx_t_3 = __Pyx_PyDict_GetItemDefault(__pyx_v_kwargs, __pyx_n_s_a1, Py_None); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2858, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_5 = __pyx_PyFloat_AsDouble(__pyx_t_3); if (unlikely((__pyx_t_5 == ((mus_float_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 2858, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __pyx_t_3 = __Pyx_PyDict_GetItemDefault(__pyx_v_kwargs, __pyx_n_s_a2, Py_None); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2858, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_6 = __pyx_PyFloat_AsDouble(__pyx_t_3); if (unlikely((__pyx_t_6 == ((mus_float_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 2858, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __pyx_t_3 = ((PyObject *)__pyx_vtabptr_8pysndlib_3clm_mus_any->from_ptr(mus_make_two_zero(__pyx_t_4, __pyx_t_5, __pyx_t_6), NULL)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2858, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_r = __pyx_t_3;
      __pyx_t_3 = 0;
      goto __pyx_L0;
 2859:         else:
+2860:             raise KeyError(f'Filter needs values for a0, a1, a2')
    /*else*/ {
      __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_KeyError, __pyx_tuple__31, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2860, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_Raise(__pyx_t_3, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __PYX_ERR(0, 2860, __pyx_L1_error)
    }
/* … */
  __pyx_tuple__31 = PyTuple_Pack(1, __pyx_kp_u_Filter_needs_values_for_a0_a1_a2); if (unlikely(!__pyx_tuple__31)) __PYX_ERR(0, 2860, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__31);
  __Pyx_GIVEREF(__pyx_tuple__31);
 2861: 
 2862:     else:
+2863:         if frequency is not None and radius is not None:
  /*else*/ {
    __pyx_t_2 = (__pyx_v_frequency != Py_None);
    if (__pyx_t_2) {
    } else {
      __pyx_t_1 = __pyx_t_2;
      goto __pyx_L9_bool_binop_done;
    }
    __pyx_t_2 = (__pyx_v_radius != Py_None);
    __pyx_t_1 = __pyx_t_2;
    __pyx_L9_bool_binop_done:;
    if (likely(__pyx_t_1)) {
/* … */
    }
+2864:             return mus_any.from_ptr(cclm.mus_make_two_zero_from_frequency_and_radius(frequency, radius))
      __Pyx_XDECREF(__pyx_r);
      __pyx_t_6 = __pyx_PyFloat_AsDouble(__pyx_v_frequency); if (unlikely((__pyx_t_6 == ((mus_float_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 2864, __pyx_L1_error)
      __pyx_t_5 = __pyx_PyFloat_AsDouble(__pyx_v_radius); if (unlikely((__pyx_t_5 == ((mus_float_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 2864, __pyx_L1_error)
      __pyx_t_3 = ((PyObject *)__pyx_vtabptr_8pysndlib_3clm_mus_any->from_ptr(mus_make_two_zero_from_frequency_and_radius(__pyx_t_6, __pyx_t_5), NULL)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2864, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_r = __pyx_t_3;
      __pyx_t_3 = 0;
      goto __pyx_L0;
 2865:         else:
+2866:             raise RuntimeError("If not specifying coeffs, must provide frequency and radius.")
    /*else*/ {
      __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_RuntimeError, __pyx_tuple__30, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2866, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_Raise(__pyx_t_3, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __PYX_ERR(0, 2866, __pyx_L1_error)
    }
  }
 2867: 
+2868: cpdef cython.double two_zero(gen: mus_any, insig: float):
static PyObject *__pyx_pw_8pysndlib_3clm_307two_zero(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static double __pyx_f_8pysndlib_3clm_two_zero(struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen, double __pyx_v_insig, CYTHON_UNUSED int __pyx_skip_dispatch) {
  double __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("two_zero", 0);
/* … */
  /* function exit code */
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_307two_zero(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_306two_zero, "\n    two zero filter of input. \n    \n    :param gen: two_zero gen\n    :param insig: input \n    :rtype: float  \n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_307two_zero = {"two_zero", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_307two_zero, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_306two_zero};
static PyObject *__pyx_pw_8pysndlib_3clm_307two_zero(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen = 0;
  double __pyx_v_insig;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("two_zero (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_gen,&__pyx_n_s_insig,0};
    PyObject* values[2] = {0,0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_gen)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 2868, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_insig)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 2868, __pyx_L3_error)
        else {
          __Pyx_RaiseArgtupleInvalid("two_zero", 1, 2, 2, 1); __PYX_ERR(0, 2868, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "two_zero") < 0)) __PYX_ERR(0, 2868, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 2)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
      values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
    }
    __pyx_v_gen = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)values[0]);
    __pyx_v_insig = __pyx_PyFloat_AsDouble(values[1]); if (unlikely((__pyx_v_insig == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 2868, __pyx_L3_error)
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("two_zero", 1, 2, 2, __pyx_nargs); __PYX_ERR(0, 2868, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.two_zero", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_gen), __pyx_ptype_8pysndlib_3clm_mus_any, 0, "gen", 0))) __PYX_ERR(0, 2868, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pysndlib_3clm_306two_zero(__pyx_self, __pyx_v_gen, __pyx_v_insig);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_306two_zero(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen, double __pyx_v_insig) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("two_zero", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_8pysndlib_3clm_two_zero(__pyx_v_gen, __pyx_v_insig, 0); if (unlikely(__pyx_t_1 == ((double)-1) && PyErr_Occurred())) __PYX_ERR(0, 2868, __pyx_L1_error)
  __pyx_t_2 = PyFloat_FromDouble(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2868, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pysndlib.clm.two_zero", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_41 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 2868, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  if (PyDict_SetItem(__pyx_t_41, __pyx_n_s_gen, __pyx_n_s_mus_any) < 0) __PYX_ERR(0, 2868, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_41, __pyx_n_s_insig, __pyx_n_s_float) < 0) __PYX_ERR(0, 2868, __pyx_L1_error)
  __pyx_t_40 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_307two_zero, 0, __pyx_n_s_two_zero, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__364)); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 2868, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_40, __pyx_t_41);
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_two_zero, __pyx_t_40) < 0) __PYX_ERR(0, 2868, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
/* … */
  __pyx_codeobj__364 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__350, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_two_zero, 2868, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__364)) __PYX_ERR(0, 2868, __pyx_L1_error)
 2869:     """
 2870:     two zero filter of input. 
 2871:     
 2872:     :param gen: two_zero gen
 2873:     :param insig: input 
 2874:     :rtype: float  
 2875:     """
+2876:     return cclm.mus_two_zero(gen._ptr, insig)
  __pyx_r = mus_two_zero(__pyx_v_gen->_ptr, __pyx_v_insig);
  goto __pyx_L0;
 2877: 
+2878: cpdef bint is_two_zero(gen: mus_any):
static PyObject *__pyx_pw_8pysndlib_3clm_309is_two_zero(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static int __pyx_f_8pysndlib_3clm_is_two_zero(struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen, CYTHON_UNUSED int __pyx_skip_dispatch) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_two_zero", 0);
/* … */
  /* function exit code */
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_309is_two_zero(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_308is_two_zero, "\n    returns True if gen is a two_zero.\n    \n    :param gen: gen\n    :rtype: bool\n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_309is_two_zero = {"is_two_zero", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_309is_two_zero, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_308is_two_zero};
static PyObject *__pyx_pw_8pysndlib_3clm_309is_two_zero(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_two_zero (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_gen,0};
    PyObject* values[1] = {0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_gen)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 2878, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "is_two_zero") < 0)) __PYX_ERR(0, 2878, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
    }
    __pyx_v_gen = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)values[0]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("is_two_zero", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 2878, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.is_two_zero", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_gen), __pyx_ptype_8pysndlib_3clm_mus_any, 0, "gen", 0))) __PYX_ERR(0, 2878, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pysndlib_3clm_308is_two_zero(__pyx_self, __pyx_v_gen);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_308is_two_zero(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_two_zero", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_8pysndlib_3clm_is_two_zero(__pyx_v_gen, 0); if (unlikely(__pyx_t_1 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 2878, __pyx_L1_error)
  __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2878, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pysndlib.clm.is_two_zero", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_40 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 2878, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  if (PyDict_SetItem(__pyx_t_40, __pyx_n_s_gen, __pyx_n_s_mus_any) < 0) __PYX_ERR(0, 2878, __pyx_L1_error)
  __pyx_t_41 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_309is_two_zero, 0, __pyx_n_s_is_two_zero, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__365)); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 2878, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_41, __pyx_t_40);
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_is_two_zero, __pyx_t_41) < 0) __PYX_ERR(0, 2878, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
/* … */
  __pyx_codeobj__365 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__46, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_is_two_zero, 2878, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__365)) __PYX_ERR(0, 2878, __pyx_L1_error)
 2879:     """
 2880:     returns True if gen is a two_zero.
 2881:     
 2882:     :param gen: gen
 2883:     :rtype: bool
 2884:     """
+2885:     return cclm.mus_is_two_zero(gen._ptr)
  __pyx_r = mus_is_two_zero(__pyx_v_gen->_ptr);
  goto __pyx_L0;
 2886: 
 2887: 
 2888: 
 2889: 
 2890: # ---------------- formant ---------------- #
+2891: cpdef mus_any make_formant(frequency: float, radius: float):
static PyObject *__pyx_pw_8pysndlib_3clm_311make_formant(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_f_8pysndlib_3clm_make_formant(double __pyx_v_frequency, double __pyx_v_radius, CYTHON_UNUSED int __pyx_skip_dispatch) {
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("make_formant", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_AddTraceback("pysndlib.clm.make_formant", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_311make_formant(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_310make_formant, "\n    return a new formant generator (a resonator). radius sets the pole radius (in terms of the 'unit circle').\n    frequency sets the resonance center frequency (hz).\n    \n    :param frequency: resonance center frequency \\in Hz\n    :param radius: resonance width, refers to the unit circle, so it should be between 0.0 and (less than) 1.0. \n    :return: formant gen\n    :rtype: mus_any\n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_311make_formant = {"make_formant", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_311make_formant, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_310make_formant};
static PyObject *__pyx_pw_8pysndlib_3clm_311make_formant(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  double __pyx_v_frequency;
  double __pyx_v_radius;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("make_formant (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_frequency,&__pyx_n_s_radius,0};
    PyObject* values[2] = {0,0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_frequency)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 2891, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_radius)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 2891, __pyx_L3_error)
        else {
          __Pyx_RaiseArgtupleInvalid("make_formant", 1, 2, 2, 1); __PYX_ERR(0, 2891, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "make_formant") < 0)) __PYX_ERR(0, 2891, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 2)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
      values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
    }
    __pyx_v_frequency = __pyx_PyFloat_AsDouble(values[0]); if (unlikely((__pyx_v_frequency == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 2891, __pyx_L3_error)
    __pyx_v_radius = __pyx_PyFloat_AsDouble(values[1]); if (unlikely((__pyx_v_radius == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 2891, __pyx_L3_error)
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("make_formant", 1, 2, 2, __pyx_nargs); __PYX_ERR(0, 2891, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.make_formant", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pysndlib_3clm_310make_formant(__pyx_self, __pyx_v_frequency, __pyx_v_radius);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_310make_formant(CYTHON_UNUSED PyObject *__pyx_self, double __pyx_v_frequency, double __pyx_v_radius) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("make_formant", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = ((PyObject *)__pyx_f_8pysndlib_3clm_make_formant(__pyx_v_frequency, __pyx_v_radius, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2891, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pysndlib.clm.make_formant", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__366 = PyTuple_Pack(2, __pyx_n_s_frequency, __pyx_n_s_radius); if (unlikely(!__pyx_tuple__366)) __PYX_ERR(0, 2891, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__366);
  __Pyx_GIVEREF(__pyx_tuple__366);
/* … */
  __pyx_t_41 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 2891, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  if (PyDict_SetItem(__pyx_t_41, __pyx_n_s_frequency, __pyx_n_s_float) < 0) __PYX_ERR(0, 2891, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_41, __pyx_n_s_radius, __pyx_n_s_float) < 0) __PYX_ERR(0, 2891, __pyx_L1_error)
  __pyx_t_40 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_311make_formant, 0, __pyx_n_s_make_formant, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__367)); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 2891, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_40, __pyx_t_41);
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_make_formant, __pyx_t_40) < 0) __PYX_ERR(0, 2891, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
  __pyx_codeobj__367 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__366, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_make_formant, 2891, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__367)) __PYX_ERR(0, 2891, __pyx_L1_error)
 2892:     """
 2893:     return a new formant generator (a resonator). radius sets the pole radius (in terms of the 'unit circle').
 2894:     frequency sets the resonance center frequency (hz).
 2895:     
 2896:     :param frequency: resonance center frequency \in Hz
 2897:     :param radius: resonance width, refers to the unit circle, so it should be between 0.0 and (less than) 1.0. 
 2898:     :return: formant gen
 2899:     :rtype: mus_any
 2900:     """
+2901:     check_range('frequency', frequency, 0.0, get_srate() / 2)
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_check_range); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2901, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = PyFloat_FromDouble(__pyx_v_frequency); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2901, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = __pyx_f_8pysndlib_3clm_get_srate(0); if (unlikely(__pyx_t_4 == ((double)-1) && PyErr_Occurred())) __PYX_ERR(0, 2901, __pyx_L1_error)
  __pyx_t_5 = PyFloat_FromDouble((__pyx_t_4 / 2.0)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2901, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_6 = NULL;
  __pyx_t_7 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_6)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_6);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
      __pyx_t_7 = 1;
    }
  }
  {
    PyObject *__pyx_callargs[5] = {__pyx_t_6, __pyx_n_s_frequency, __pyx_t_3, __pyx_float_0_0, __pyx_t_5};
    __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_7, 4+__pyx_t_7);
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2901, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 2902: 
+2903:     return mus_any.from_ptr(cclm.mus_make_formant(frequency, radius))
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __pyx_t_1 = ((PyObject *)__pyx_vtabptr_8pysndlib_3clm_mus_any->from_ptr(mus_make_formant(__pyx_v_frequency, __pyx_v_radius), NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2903, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)__pyx_t_1);
  __pyx_t_1 = 0;
  goto __pyx_L0;
 2904: 
+2905: cpdef cython.double formant(gen: mus_any, insig: float, radians: Optional[float]=None):
static PyObject *__pyx_pw_8pysndlib_3clm_313formant(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static double __pyx_f_8pysndlib_3clm_formant(struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen, double __pyx_v_insig, CYTHON_UNUSED int __pyx_skip_dispatch, struct __pyx_opt_args_8pysndlib_3clm_formant *__pyx_optional_args) {
  PyObject *__pyx_v_radians = ((PyObject *)Py_None);
  double __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("formant", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_radians = __pyx_optional_args->radians;
    }
  }
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("pysndlib.clm.formant", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_313formant(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_312formant, "\n    next sample from formant generator.\n    \n    :param gen: formant gen\n    :param insig: input value\n    :param radians: frequency \\in radians\n    :rtype: float\n    \n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_313formant = {"formant", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_313formant, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_312formant};
static PyObject *__pyx_pw_8pysndlib_3clm_313formant(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen = 0;
  double __pyx_v_insig;
  PyObject *__pyx_v_radians = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("formant (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_gen,&__pyx_n_s_insig,&__pyx_n_s_radians,0};
    PyObject* values[3] = {0,0,0};
    values[2] = ((PyObject *)Py_None);
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_gen)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 2905, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_insig)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 2905, __pyx_L3_error)
        else {
          __Pyx_RaiseArgtupleInvalid("formant", 0, 2, 3, 1); __PYX_ERR(0, 2905, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_radians);
          if (value) { values[2] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 2905, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "formant") < 0)) __PYX_ERR(0, 2905, __pyx_L3_error)
      }
    } else {
      switch (__pyx_nargs) {
        case  3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_gen = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)values[0]);
    __pyx_v_insig = __pyx_PyFloat_AsDouble(values[1]); if (unlikely((__pyx_v_insig == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 2905, __pyx_L3_error)
    __pyx_v_radians = values[2];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("formant", 0, 2, 3, __pyx_nargs); __PYX_ERR(0, 2905, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.formant", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_gen), __pyx_ptype_8pysndlib_3clm_mus_any, 0, "gen", 0))) __PYX_ERR(0, 2905, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pysndlib_3clm_312formant(__pyx_self, __pyx_v_gen, __pyx_v_insig, __pyx_v_radians);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_312formant(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen, double __pyx_v_insig, PyObject *__pyx_v_radians) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("formant", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2.__pyx_n = 1;
  __pyx_t_2.radians = __pyx_v_radians;
  __pyx_t_1 = __pyx_f_8pysndlib_3clm_formant(__pyx_v_gen, __pyx_v_insig, 0, &__pyx_t_2); if (unlikely(__pyx_t_1 == ((double)-1) && PyErr_Occurred())) __PYX_ERR(0, 2905, __pyx_L1_error)
  __pyx_t_3 = PyFloat_FromDouble(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2905, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_r = __pyx_t_3;
  __pyx_t_3 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("pysndlib.clm.formant", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__368 = PyTuple_Pack(3, __pyx_n_s_gen, __pyx_n_s_insig, __pyx_n_s_radians); if (unlikely(!__pyx_tuple__368)) __PYX_ERR(0, 2905, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__368);
  __Pyx_GIVEREF(__pyx_tuple__368);
/* … */
  __pyx_t_40 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 2905, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  if (PyDict_SetItem(__pyx_t_40, __pyx_n_s_gen, __pyx_n_s_mus_any) < 0) __PYX_ERR(0, 2905, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_40, __pyx_n_s_insig, __pyx_n_s_float) < 0) __PYX_ERR(0, 2905, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_40, __pyx_n_s_radians, __pyx_kp_s_Optional_float) < 0) __PYX_ERR(0, 2905, __pyx_L1_error)
  __pyx_t_41 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_313formant, 0, __pyx_n_s_formant, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__369)); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 2905, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_41, __pyx_tuple__258);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_41, __pyx_t_40);
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_formant, __pyx_t_41) < 0) __PYX_ERR(0, 2905, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
  __pyx_codeobj__369 = (PyObject*)__Pyx_PyCode_New(3, 0, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__368, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_formant, 2905, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__369)) __PYX_ERR(0, 2905, __pyx_L1_error)
/* … */
struct __pyx_opt_args_8pysndlib_3clm_formant {
  int __pyx_n;
  PyObject *radians;
};
 2906:     """
 2907:     next sample from formant generator.
 2908:     
 2909:     :param gen: formant gen
 2910:     :param insig: input value
 2911:     :param radians: frequency \in radians
 2912:     :rtype: float
 2913:     
 2914:     """
+2915:     if radians:
  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_radians); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 2915, __pyx_L1_error)
  if (__pyx_t_1) {
/* … */
  }
+2916:         return cclm.mus_formant_with_frequency(gen._ptr, insig, radians)
    __pyx_t_2 = __pyx_PyFloat_AsDouble(__pyx_v_radians); if (unlikely((__pyx_t_2 == ((mus_float_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 2916, __pyx_L1_error)
    __pyx_r = mus_formant_with_frequency(__pyx_v_gen->_ptr, __pyx_v_insig, __pyx_t_2);
    goto __pyx_L0;
 2917:     else:
+2918:         return cclm.mus_formant(gen._ptr, insig)
  /*else*/ {
    __pyx_r = mus_formant(__pyx_v_gen->_ptr, __pyx_v_insig);
    goto __pyx_L0;
  }
 2919: 
+2920: cpdef bint is_formant(gen: mus_any):
static PyObject *__pyx_pw_8pysndlib_3clm_315is_formant(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static int __pyx_f_8pysndlib_3clm_is_formant(struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen, CYTHON_UNUSED int __pyx_skip_dispatch) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_formant", 0);
/* … */
  /* function exit code */
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_315is_formant(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_314is_formant, "\n    returns True if gen is a formant.\n    \n    :param gen: gen\n    :rtype: bool\n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_315is_formant = {"is_formant", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_315is_formant, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_314is_formant};
static PyObject *__pyx_pw_8pysndlib_3clm_315is_formant(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_formant (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_gen,0};
    PyObject* values[1] = {0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_gen)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 2920, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "is_formant") < 0)) __PYX_ERR(0, 2920, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
    }
    __pyx_v_gen = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)values[0]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("is_formant", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 2920, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.is_formant", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_gen), __pyx_ptype_8pysndlib_3clm_mus_any, 0, "gen", 0))) __PYX_ERR(0, 2920, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pysndlib_3clm_314is_formant(__pyx_self, __pyx_v_gen);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_314is_formant(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_formant", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_8pysndlib_3clm_is_formant(__pyx_v_gen, 0); if (unlikely(__pyx_t_1 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 2920, __pyx_L1_error)
  __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2920, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pysndlib.clm.is_formant", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_41 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 2920, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  if (PyDict_SetItem(__pyx_t_41, __pyx_n_s_gen, __pyx_n_s_mus_any) < 0) __PYX_ERR(0, 2920, __pyx_L1_error)
  __pyx_t_40 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_315is_formant, 0, __pyx_n_s_is_formant, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__370)); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 2920, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_40, __pyx_t_41);
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_is_formant, __pyx_t_40) < 0) __PYX_ERR(0, 2920, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
/* … */
  __pyx_codeobj__370 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__46, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_is_formant, 2920, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__370)) __PYX_ERR(0, 2920, __pyx_L1_error)
 2921:     """
 2922:     returns True if gen is a formant.
 2923:     
 2924:     :param gen: gen
 2925:     :rtype: bool
 2926:     """
+2927:     return cclm.mus_is_formant(gen._ptr)
  __pyx_r = mus_is_formant(__pyx_v_gen->_ptr);
  goto __pyx_L0;
 2928: 
 2929: # ---------------- formant-bank ---------------- #   
+2930: cpdef mus_any make_formant_bank(filters: list, amps=None):
static PyObject *__pyx_pw_8pysndlib_3clm_317make_formant_bank(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_f_8pysndlib_3clm_make_formant_bank(PyObject *__pyx_v_filters, CYTHON_UNUSED int __pyx_skip_dispatch, struct __pyx_opt_args_8pysndlib_3clm_make_formant_bank *__pyx_optional_args) {
  PyObject *__pyx_v_amps = ((PyObject *)Py_None);
  PyObject *__pyx_v_p = NULL;
  __Pyx_memviewslice __pyx_v_amps_view = { 0, 0, { 0 }, { 0 }, { 0 } };
  struct __pyx_obj_8pysndlib_3clm_mus_any_array *__pyx_v_filt_array = NULL;
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen = NULL;
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("make_formant_bank", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_amps = __pyx_optional_args->amps;
    }
  }
  __Pyx_INCREF(__pyx_v_amps);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __PYX_XCLEAR_MEMVIEW(&__pyx_t_5, 1);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_AddTraceback("pysndlib.clm.make_formant_bank", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_p);
  __PYX_XCLEAR_MEMVIEW(&__pyx_v_amps_view, 1);
  __Pyx_XDECREF((PyObject *)__pyx_v_filt_array);
  __Pyx_XDECREF((PyObject *)__pyx_v_gen);
  __Pyx_XDECREF(__pyx_v_amps);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_317make_formant_bank(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_316make_formant_bank, "\n    return a new formant-bank generator.\n    \n    :param filters: list of filter gens\n    :param amps: list of amps to apply to filters\n    :return: formant_bank gen\n    :rtype: mus_any\n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_317make_formant_bank = {"make_formant_bank", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_317make_formant_bank, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_316make_formant_bank};
static PyObject *__pyx_pw_8pysndlib_3clm_317make_formant_bank(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_filters = 0;
  PyObject *__pyx_v_amps = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("make_formant_bank (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_filters,&__pyx_n_s_amps,0};
    PyObject* values[2] = {0,0};
    values[1] = ((PyObject *)Py_None);
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_filters)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 2930, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_amps);
          if (value) { values[1] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 2930, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "make_formant_bank") < 0)) __PYX_ERR(0, 2930, __pyx_L3_error)
      }
    } else {
      switch (__pyx_nargs) {
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_filters = ((PyObject*)values[0]);
    __pyx_v_amps = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("make_formant_bank", 0, 1, 2, __pyx_nargs); __PYX_ERR(0, 2930, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.make_formant_bank", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_filters), (&PyList_Type), 0, "filters", 1))) __PYX_ERR(0, 2930, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pysndlib_3clm_316make_formant_bank(__pyx_self, __pyx_v_filters, __pyx_v_amps);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_316make_formant_bank(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_filters, PyObject *__pyx_v_amps) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("make_formant_bank", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2.__pyx_n = 1;
  __pyx_t_2.amps = __pyx_v_amps;
  __pyx_t_1 = ((PyObject *)__pyx_f_8pysndlib_3clm_make_formant_bank(__pyx_v_filters, 0, &__pyx_t_2)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2930, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pysndlib.clm.make_formant_bank", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__371 = PyTuple_Pack(2, __pyx_n_s_filters, __pyx_n_s_amps); if (unlikely(!__pyx_tuple__371)) __PYX_ERR(0, 2930, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__371);
  __Pyx_GIVEREF(__pyx_tuple__371);
/* … */
  __pyx_t_40 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 2930, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  if (PyDict_SetItem(__pyx_t_40, __pyx_n_s_filters, __pyx_n_s_list) < 0) __PYX_ERR(0, 2930, __pyx_L1_error)
  __pyx_t_41 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_317make_formant_bank, 0, __pyx_n_s_make_formant_bank, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__372)); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 2930, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_41, __pyx_tuple__258);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_41, __pyx_t_40);
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_make_formant_bank, __pyx_t_41) < 0) __PYX_ERR(0, 2930, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
  __pyx_codeobj__372 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__371, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_make_formant_bank, 2930, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__372)) __PYX_ERR(0, 2930, __pyx_L1_error)
/* … */
struct __pyx_opt_args_8pysndlib_3clm_make_formant_bank {
  int __pyx_n;
  PyObject *amps;
};
 2931:     """
 2932:     return a new formant-bank generator.
 2933:     
 2934:     :param filters: list of filter gens
 2935:     :param amps: list of amps to apply to filters
 2936:     :return: formant_bank gen
 2937:     :rtype: mus_any
 2938:     """
 2939: 
+2940:     p = list(map(is_formant, filters))
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_is_formant); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2940, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2940, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1);
  __Pyx_INCREF(__pyx_v_filters);
  __Pyx_GIVEREF(__pyx_v_filters);
  PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_filters);
  __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_map, __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2940, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PySequence_ListKeepNew(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2940, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_p = ((PyObject*)__pyx_t_2);
  __pyx_t_2 = 0;
 2941: 
+2942:     if not all(p):
  __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_builtin_all, __pyx_v_p); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2942, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(0, 2942, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_4 = (!__pyx_t_3);
  if (unlikely(__pyx_t_4)) {
/* … */
  }
+2943:         raise TypeError(f'filter list contains at least one element that is not a formant.')
    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__32, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2943, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __PYX_ERR(0, 2943, __pyx_L1_error)
/* … */
  __pyx_tuple__32 = PyTuple_Pack(1, __pyx_kp_u_filter_list_contains_at_least_on); if (unlikely(!__pyx_tuple__32)) __PYX_ERR(0, 2943, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__32);
  __Pyx_GIVEREF(__pyx_tuple__32);
 2944: 
+2945:     cdef double [:] amps_view = None
  __pyx_t_5 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(Py_None, PyBUF_WRITABLE); if (unlikely(!__pyx_t_5.memview)) __PYX_ERR(0, 2945, __pyx_L1_error)
  __pyx_v_amps_view = __pyx_t_5;
  __pyx_t_5.memview = NULL;
  __pyx_t_5.data = NULL;
 2946: 
+2947:     filt_array = mus_any_array.from_pylist(filters)
  __pyx_t_2 = ((PyObject *)__pyx_f_8pysndlib_3clm_13mus_any_array_from_pylist(__pyx_v_filters)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2947, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_v_filt_array = ((struct __pyx_obj_8pysndlib_3clm_mus_any_array *)__pyx_t_2);
  __pyx_t_2 = 0;
 2948: 
+2949:     if amps is not None:
  __pyx_t_4 = (__pyx_v_amps != Py_None);
  if (__pyx_t_4) {
/* … */
    goto __pyx_L4;
  }
+2950:         if isinstance(amps, list):
    __pyx_t_4 = PyList_Check(__pyx_v_amps); 
    if (__pyx_t_4) {
/* … */
    }
+2951:             amps = np.array(amps)
      __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2951, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_array); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2951, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_1 = NULL;
      __pyx_t_7 = 0;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_6))) {
        __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_6);
        if (likely(__pyx_t_1)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
          __Pyx_INCREF(__pyx_t_1);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_6, function);
          __pyx_t_7 = 1;
        }
      }
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_1, __pyx_v_amps};
        __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_6, __pyx_callargs+1-__pyx_t_7, 1+__pyx_t_7);
        __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
        if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2951, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      }
      __Pyx_DECREF_SET(__pyx_v_amps, __pyx_t_2);
      __pyx_t_2 = 0;
+2952:         amps_view = amps
    __pyx_t_5 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_amps, PyBUF_WRITABLE); if (unlikely(!__pyx_t_5.memview)) __PYX_ERR(0, 2952, __pyx_L1_error)
    __PYX_XCLEAR_MEMVIEW(&__pyx_v_amps_view, 1);
    __pyx_v_amps_view = __pyx_t_5;
    __pyx_t_5.memview = NULL;
    __pyx_t_5.data = NULL;
+2953:         gen = mus_any.from_ptr(cclm.mus_make_formant_bank(len(filters),filt_array.data, &amps_view[0]))
    __pyx_t_8 = PyList_GET_SIZE(__pyx_v_filters); if (unlikely(__pyx_t_8 == ((Py_ssize_t)-1))) __PYX_ERR(0, 2953, __pyx_L1_error)
    __pyx_t_9 = 0;
    __pyx_t_7 = -1;
    if (__pyx_t_9 < 0) {
      __pyx_t_9 += __pyx_v_amps_view.shape[0];
      if (unlikely(__pyx_t_9 < 0)) __pyx_t_7 = 0;
    } else if (unlikely(__pyx_t_9 >= __pyx_v_amps_view.shape[0])) __pyx_t_7 = 0;
    if (unlikely(__pyx_t_7 != -1)) {
      __Pyx_RaiseBufferIndexError(__pyx_t_7);
      __PYX_ERR(0, 2953, __pyx_L1_error)
    }
    __pyx_t_2 = ((PyObject *)__pyx_vtabptr_8pysndlib_3clm_mus_any->from_ptr(mus_make_formant_bank(__pyx_t_8, __pyx_v_filt_array->data, (&(*((double *) ( /* dim=0 */ (__pyx_v_amps_view.data + __pyx_t_9 * __pyx_v_amps_view.strides[0]) ))))), NULL)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2953, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_v_gen = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)__pyx_t_2);
    __pyx_t_2 = 0;
 2954:     else:
+2955:         gen = mus_any.from_ptr(cclm.mus_make_formant_bank(len(filters),filt_array.data, NULL))
  /*else*/ {
    __pyx_t_8 = PyList_GET_SIZE(__pyx_v_filters); if (unlikely(__pyx_t_8 == ((Py_ssize_t)-1))) __PYX_ERR(0, 2955, __pyx_L1_error)
    __pyx_t_2 = ((PyObject *)__pyx_vtabptr_8pysndlib_3clm_mus_any->from_ptr(mus_make_formant_bank(__pyx_t_8, __pyx_v_filt_array->data, NULL), NULL)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2955, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_v_gen = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)__pyx_t_2);
    __pyx_t_2 = 0;
  }
  __pyx_L4:;
+2956:     gen.cache_extend([filt_array, amps, filters])
  __pyx_t_2 = PyList_New(3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2956, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF((PyObject *)__pyx_v_filt_array);
  __Pyx_GIVEREF((PyObject *)__pyx_v_filt_array);
  PyList_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_v_filt_array));
  __Pyx_INCREF(__pyx_v_amps);
  __Pyx_GIVEREF(__pyx_v_amps);
  PyList_SET_ITEM(__pyx_t_2, 1, __pyx_v_amps);
  __Pyx_INCREF(__pyx_v_filters);
  __Pyx_GIVEREF(__pyx_v_filters);
  PyList_SET_ITEM(__pyx_t_2, 2, __pyx_v_filters);
  __pyx_t_6 = ((struct __pyx_vtabstruct_8pysndlib_3clm_mus_any *)__pyx_v_gen->__pyx_vtab)->cache_extend(__pyx_v_gen, __pyx_t_2, 0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2956, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+2957:     return gen
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __Pyx_INCREF((PyObject *)__pyx_v_gen);
  __pyx_r = __pyx_v_gen;
  goto __pyx_L0;
 2958: 
 2959: 
+2960: cpdef cython.double formant_bank(gen: mus_any, inputs):
static PyObject *__pyx_pw_8pysndlib_3clm_319formant_bank(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static double __pyx_f_8pysndlib_3clm_formant_bank(struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen, PyObject *__pyx_v_inputs, CYTHON_UNUSED int __pyx_skip_dispatch) {
  __Pyx_memviewslice __pyx_v_inputs_view = { 0, 0, { 0 }, { 0 }, { 0 } };
  PyObject *__pyx_v_res = NULL;
  double __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("formant_bank", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __PYX_XCLEAR_MEMVIEW(&__pyx_t_1, 1);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("pysndlib.clm.formant_bank", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __PYX_XCLEAR_MEMVIEW(&__pyx_v_inputs_view, 1);
  __Pyx_XDECREF(__pyx_v_res);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_319formant_bank(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_318formant_bank, "\n    sum a bank of formant generators.\n    \n    :param gen: formant_bank gen\n    :param inputs: can be a list/array of inputs or a single input\n    :rtype: float\n    \n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_319formant_bank = {"formant_bank", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_319formant_bank, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_318formant_bank};
static PyObject *__pyx_pw_8pysndlib_3clm_319formant_bank(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen = 0;
  PyObject *__pyx_v_inputs = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("formant_bank (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_gen,&__pyx_n_s_inputs,0};
    PyObject* values[2] = {0,0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_gen)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 2960, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_inputs)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 2960, __pyx_L3_error)
        else {
          __Pyx_RaiseArgtupleInvalid("formant_bank", 1, 2, 2, 1); __PYX_ERR(0, 2960, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "formant_bank") < 0)) __PYX_ERR(0, 2960, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 2)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
      values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
    }
    __pyx_v_gen = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)values[0]);
    __pyx_v_inputs = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("formant_bank", 1, 2, 2, __pyx_nargs); __PYX_ERR(0, 2960, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.formant_bank", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_gen), __pyx_ptype_8pysndlib_3clm_mus_any, 0, "gen", 0))) __PYX_ERR(0, 2960, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pysndlib_3clm_318formant_bank(__pyx_self, __pyx_v_gen, __pyx_v_inputs);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_318formant_bank(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen, PyObject *__pyx_v_inputs) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("formant_bank", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_8pysndlib_3clm_formant_bank(__pyx_v_gen, __pyx_v_inputs, 0); if (unlikely(__pyx_t_1 == ((double)-1) && PyErr_Occurred())) __PYX_ERR(0, 2960, __pyx_L1_error)
  __pyx_t_2 = PyFloat_FromDouble(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2960, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pysndlib.clm.formant_bank", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__373 = PyTuple_Pack(2, __pyx_n_s_gen, __pyx_n_s_inputs); if (unlikely(!__pyx_tuple__373)) __PYX_ERR(0, 2960, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__373);
  __Pyx_GIVEREF(__pyx_tuple__373);
/* … */
  __pyx_t_41 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 2960, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  if (PyDict_SetItem(__pyx_t_41, __pyx_n_s_gen, __pyx_n_s_mus_any) < 0) __PYX_ERR(0, 2960, __pyx_L1_error)
  __pyx_t_40 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_319formant_bank, 0, __pyx_n_s_formant_bank, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__374)); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 2960, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_40, __pyx_t_41);
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_formant_bank, __pyx_t_40) < 0) __PYX_ERR(0, 2960, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
  __pyx_codeobj__374 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__373, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_formant_bank, 2960, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__374)) __PYX_ERR(0, 2960, __pyx_L1_error)
 2961:     """
 2962:     sum a bank of formant generators.
 2963:     
 2964:     :param gen: formant_bank gen
 2965:     :param inputs: can be a list/array of inputs or a single input
 2966:     :rtype: float
 2967:     
 2968:     """
 2969: 
+2970:     cdef double [:] inputs_view = None
  __pyx_t_1 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(Py_None, PyBUF_WRITABLE); if (unlikely(!__pyx_t_1.memview)) __PYX_ERR(0, 2970, __pyx_L1_error)
  __pyx_v_inputs_view = __pyx_t_1;
  __pyx_t_1.memview = NULL;
  __pyx_t_1.data = NULL;
 2971: 
+2972:     if isinstance(inputs, np.ndarray):
  __pyx_t_2 = __Pyx_TypeCheck(__pyx_v_inputs, __pyx_ptype_5numpy_ndarray); 
  if (__pyx_t_2) {
/* … */
  }
+2973:         inputs_view = inputs
    __pyx_t_1 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_inputs, PyBUF_WRITABLE); if (unlikely(!__pyx_t_1.memview)) __PYX_ERR(0, 2973, __pyx_L1_error)
    __PYX_XCLEAR_MEMVIEW(&__pyx_v_inputs_view, 1);
    __pyx_v_inputs_view = __pyx_t_1;
    __pyx_t_1.memview = NULL;
    __pyx_t_1.data = NULL;
+2974:         res = cclm.mus_formant_bank_with_inputs(gen._ptr, &inputs_view[0])
    __pyx_t_3 = 0;
    __pyx_t_4 = -1;
    if (__pyx_t_3 < 0) {
      __pyx_t_3 += __pyx_v_inputs_view.shape[0];
      if (unlikely(__pyx_t_3 < 0)) __pyx_t_4 = 0;
    } else if (unlikely(__pyx_t_3 >= __pyx_v_inputs_view.shape[0])) __pyx_t_4 = 0;
    if (unlikely(__pyx_t_4 != -1)) {
      __Pyx_RaiseBufferIndexError(__pyx_t_4);
      __PYX_ERR(0, 2974, __pyx_L1_error)
    }
    __pyx_t_5 = PyFloat_FromDouble(mus_formant_bank_with_inputs(__pyx_v_gen->_ptr, (&(*((double *) ( /* dim=0 */ (__pyx_v_inputs_view.data + __pyx_t_3 * __pyx_v_inputs_view.strides[0]) )))))); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2974, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_v_res = __pyx_t_5;
    __pyx_t_5 = 0;
+2975:         return res
    __pyx_t_6 = __pyx_PyFloat_AsDouble(__pyx_v_res); if (unlikely((__pyx_t_6 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 2975, __pyx_L1_error)
    __pyx_r = __pyx_t_6;
    goto __pyx_L0;
 2976:     else:
+2977:         res = cclm.mus_formant_bank(gen._ptr, inputs)
  /*else*/ {
    __pyx_t_7 = __pyx_PyFloat_AsDouble(__pyx_v_inputs); if (unlikely((__pyx_t_7 == ((mus_float_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 2977, __pyx_L1_error)
    __pyx_t_5 = PyFloat_FromDouble(mus_formant_bank(__pyx_v_gen->_ptr, __pyx_t_7)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2977, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_v_res = __pyx_t_5;
    __pyx_t_5 = 0;
  }
+2978:     return res
  __pyx_t_6 = __pyx_PyFloat_AsDouble(__pyx_v_res); if (unlikely((__pyx_t_6 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 2978, __pyx_L1_error)
  __pyx_r = __pyx_t_6;
  goto __pyx_L0;
 2979: 
+2980: cpdef bint is_formant_bank(gen: mus_any):
static PyObject *__pyx_pw_8pysndlib_3clm_321is_formant_bank(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static int __pyx_f_8pysndlib_3clm_is_formant_bank(struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen, CYTHON_UNUSED int __pyx_skip_dispatch) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_formant_bank", 0);
/* … */
  /* function exit code */
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_321is_formant_bank(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_320is_formant_bank, "\n    returns True if gen is a formant_bank.\n    \n    :param gen: gen\n    :rtype: bool\n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_321is_formant_bank = {"is_formant_bank", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_321is_formant_bank, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_320is_formant_bank};
static PyObject *__pyx_pw_8pysndlib_3clm_321is_formant_bank(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_formant_bank (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_gen,0};
    PyObject* values[1] = {0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_gen)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 2980, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "is_formant_bank") < 0)) __PYX_ERR(0, 2980, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
    }
    __pyx_v_gen = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)values[0]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("is_formant_bank", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 2980, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.is_formant_bank", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_gen), __pyx_ptype_8pysndlib_3clm_mus_any, 0, "gen", 0))) __PYX_ERR(0, 2980, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pysndlib_3clm_320is_formant_bank(__pyx_self, __pyx_v_gen);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_320is_formant_bank(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_formant_bank", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_8pysndlib_3clm_is_formant_bank(__pyx_v_gen, 0); if (unlikely(__pyx_t_1 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 2980, __pyx_L1_error)
  __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2980, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pysndlib.clm.is_formant_bank", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_40 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 2980, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  if (PyDict_SetItem(__pyx_t_40, __pyx_n_s_gen, __pyx_n_s_mus_any) < 0) __PYX_ERR(0, 2980, __pyx_L1_error)
  __pyx_t_41 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_321is_formant_bank, 0, __pyx_n_s_is_formant_bank, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__375)); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 2980, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_41, __pyx_t_40);
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_is_formant_bank, __pyx_t_41) < 0) __PYX_ERR(0, 2980, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
/* … */
  __pyx_codeobj__375 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__46, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_is_formant_bank, 2980, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__375)) __PYX_ERR(0, 2980, __pyx_L1_error)
 2981:     """
 2982:     returns True if gen is a formant_bank.
 2983:     
 2984:     :param gen: gen
 2985:     :rtype: bool
 2986:     """
+2987:     return cclm.mus_is_formant_bank(gen._ptr)
  __pyx_r = mus_is_formant_bank(__pyx_v_gen->_ptr);
  goto __pyx_L0;
 2988: 
 2989: # ---------------- firmant ---------------- #
+2990: cpdef mus_any make_firmant(frequency: float, radius: float):
static PyObject *__pyx_pw_8pysndlib_3clm_323make_firmant(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_f_8pysndlib_3clm_make_firmant(double __pyx_v_frequency, double __pyx_v_radius, CYTHON_UNUSED int __pyx_skip_dispatch) {
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("make_firmant", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_AddTraceback("pysndlib.clm.make_firmant", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_323make_firmant(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_322make_firmant, "\n    return a new firmant generator (a resonator).  radius sets the pole radius (in terms of the 'unit\n    circle'). frequency sets the resonance center frequency (hz).\n    \n    :param frequency: resonance center frequency \\in Hz\n    :param radius: resonance width, refers to the unit circle, so it should be between 0.0 and (less than) 1.0. \n    :return: formant gen\n    :rtype: mus_any       \n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_323make_firmant = {"make_firmant", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_323make_firmant, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_322make_firmant};
static PyObject *__pyx_pw_8pysndlib_3clm_323make_firmant(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  double __pyx_v_frequency;
  double __pyx_v_radius;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("make_firmant (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_frequency,&__pyx_n_s_radius,0};
    PyObject* values[2] = {0,0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_frequency)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 2990, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_radius)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 2990, __pyx_L3_error)
        else {
          __Pyx_RaiseArgtupleInvalid("make_firmant", 1, 2, 2, 1); __PYX_ERR(0, 2990, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "make_firmant") < 0)) __PYX_ERR(0, 2990, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 2)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
      values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
    }
    __pyx_v_frequency = __pyx_PyFloat_AsDouble(values[0]); if (unlikely((__pyx_v_frequency == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 2990, __pyx_L3_error)
    __pyx_v_radius = __pyx_PyFloat_AsDouble(values[1]); if (unlikely((__pyx_v_radius == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 2990, __pyx_L3_error)
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("make_firmant", 1, 2, 2, __pyx_nargs); __PYX_ERR(0, 2990, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.make_firmant", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pysndlib_3clm_322make_firmant(__pyx_self, __pyx_v_frequency, __pyx_v_radius);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_322make_firmant(CYTHON_UNUSED PyObject *__pyx_self, double __pyx_v_frequency, double __pyx_v_radius) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("make_firmant", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = ((PyObject *)__pyx_f_8pysndlib_3clm_make_firmant(__pyx_v_frequency, __pyx_v_radius, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2990, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pysndlib.clm.make_firmant", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_41 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 2990, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  if (PyDict_SetItem(__pyx_t_41, __pyx_n_s_frequency, __pyx_n_s_float) < 0) __PYX_ERR(0, 2990, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_41, __pyx_n_s_radius, __pyx_n_s_float) < 0) __PYX_ERR(0, 2990, __pyx_L1_error)
  __pyx_t_40 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_323make_firmant, 0, __pyx_n_s_make_firmant, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__376)); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 2990, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_40, __pyx_t_41);
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_make_firmant, __pyx_t_40) < 0) __PYX_ERR(0, 2990, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
/* … */
  __pyx_codeobj__376 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__366, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_make_firmant, 2990, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__376)) __PYX_ERR(0, 2990, __pyx_L1_error)
 2991:     """
 2992:     return a new firmant generator (a resonator).  radius sets the pole radius (in terms of the 'unit
 2993:     circle'). frequency sets the resonance center frequency (hz).
 2994:     
 2995:     :param frequency: resonance center frequency \in Hz
 2996:     :param radius: resonance width, refers to the unit circle, so it should be between 0.0 and (less than) 1.0. 
 2997:     :return: formant gen
 2998:     :rtype: mus_any       
 2999:     """
+3000:     check_range('frequency', frequency, 0.0, get_srate() / 2)
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_check_range); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3000, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = PyFloat_FromDouble(__pyx_v_frequency); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3000, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = __pyx_f_8pysndlib_3clm_get_srate(0); if (unlikely(__pyx_t_4 == ((double)-1) && PyErr_Occurred())) __PYX_ERR(0, 3000, __pyx_L1_error)
  __pyx_t_5 = PyFloat_FromDouble((__pyx_t_4 / 2.0)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3000, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_6 = NULL;
  __pyx_t_7 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_6)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_6);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
      __pyx_t_7 = 1;
    }
  }
  {
    PyObject *__pyx_callargs[5] = {__pyx_t_6, __pyx_n_s_frequency, __pyx_t_3, __pyx_float_0_0, __pyx_t_5};
    __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_7, 4+__pyx_t_7);
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3000, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 3001: 
+3002:     return mus_any.from_ptr(cclm.mus_make_firmant(frequency, radius))
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __pyx_t_1 = ((PyObject *)__pyx_vtabptr_8pysndlib_3clm_mus_any->from_ptr(mus_make_firmant(__pyx_v_frequency, __pyx_v_radius), NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3002, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)__pyx_t_1);
  __pyx_t_1 = 0;
  goto __pyx_L0;
 3003: 
+3004: cpdef firmant(gen: mus_any, insig: float, radians: Optional[float]=None ):
static PyObject *__pyx_pw_8pysndlib_3clm_325firmant(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyObject *__pyx_f_8pysndlib_3clm_firmant(struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen, double __pyx_v_insig, CYTHON_UNUSED int __pyx_skip_dispatch, struct __pyx_opt_args_8pysndlib_3clm_firmant *__pyx_optional_args) {
  PyObject *__pyx_v_radians = ((PyObject *)Py_None);
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("firmant", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_radians = __pyx_optional_args->radians;
    }
  }
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("pysndlib.clm.firmant", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_325firmant(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_324firmant, "\n    next sample from resonator generator.\n    \n    next sample from firmant generator.\n    :param gen: firmant gen\n    :param insig: input value\n    :param radians: frequency \\in radians\n    :rtype: float\n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_325firmant = {"firmant", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_325firmant, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_324firmant};
static PyObject *__pyx_pw_8pysndlib_3clm_325firmant(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen = 0;
  double __pyx_v_insig;
  PyObject *__pyx_v_radians = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("firmant (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_gen,&__pyx_n_s_insig,&__pyx_n_s_radians,0};
    PyObject* values[3] = {0,0,0};
    values[2] = ((PyObject *)Py_None);
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_gen)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 3004, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_insig)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 3004, __pyx_L3_error)
        else {
          __Pyx_RaiseArgtupleInvalid("firmant", 0, 2, 3, 1); __PYX_ERR(0, 3004, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_radians);
          if (value) { values[2] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 3004, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "firmant") < 0)) __PYX_ERR(0, 3004, __pyx_L3_error)
      }
    } else {
      switch (__pyx_nargs) {
        case  3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_gen = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)values[0]);
    __pyx_v_insig = __pyx_PyFloat_AsDouble(values[1]); if (unlikely((__pyx_v_insig == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 3004, __pyx_L3_error)
    __pyx_v_radians = values[2];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("firmant", 0, 2, 3, __pyx_nargs); __PYX_ERR(0, 3004, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.firmant", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_gen), __pyx_ptype_8pysndlib_3clm_mus_any, 0, "gen", 0))) __PYX_ERR(0, 3004, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pysndlib_3clm_324firmant(__pyx_self, __pyx_v_gen, __pyx_v_insig, __pyx_v_radians);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_324firmant(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen, double __pyx_v_insig, PyObject *__pyx_v_radians) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("firmant", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2.__pyx_n = 1;
  __pyx_t_2.radians = __pyx_v_radians;
  __pyx_t_1 = __pyx_f_8pysndlib_3clm_firmant(__pyx_v_gen, __pyx_v_insig, 0, &__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3004, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pysndlib.clm.firmant", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_40 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 3004, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  if (PyDict_SetItem(__pyx_t_40, __pyx_n_s_gen, __pyx_n_s_mus_any) < 0) __PYX_ERR(0, 3004, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_40, __pyx_n_s_insig, __pyx_n_s_float) < 0) __PYX_ERR(0, 3004, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_40, __pyx_n_s_radians, __pyx_kp_s_Optional_float) < 0) __PYX_ERR(0, 3004, __pyx_L1_error)
  __pyx_t_41 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_325firmant, 0, __pyx_n_s_firmant, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__377)); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 3004, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_41, __pyx_tuple__258);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_41, __pyx_t_40);
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_firmant, __pyx_t_41) < 0) __PYX_ERR(0, 3004, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
/* … */
  __pyx_codeobj__377 = (PyObject*)__Pyx_PyCode_New(3, 0, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__368, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_firmant, 3004, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__377)) __PYX_ERR(0, 3004, __pyx_L1_error)
/* … */
struct __pyx_opt_args_8pysndlib_3clm_firmant {
  int __pyx_n;
  PyObject *radians;
};
 3005:     """
 3006:     next sample from resonator generator.
 3007:     
 3008:     next sample from firmant generator.
 3009:     :param gen: firmant gen
 3010:     :param insig: input value
 3011:     :param radians: frequency \in radians
 3012:     :rtype: float
 3013:     """
+3014:     if radians:
  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_radians); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 3014, __pyx_L1_error)
  if (__pyx_t_1) {
/* … */
  }
+3015:         return cclm.mus_firmant_with_frequency(gen._ptr, insig, radians)
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_2 = __pyx_PyFloat_AsDouble(__pyx_v_radians); if (unlikely((__pyx_t_2 == ((mus_float_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 3015, __pyx_L1_error)
    __pyx_t_3 = PyFloat_FromDouble(mus_firmant_with_frequency(__pyx_v_gen->_ptr, __pyx_v_insig, __pyx_t_2)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3015, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_r = __pyx_t_3;
    __pyx_t_3 = 0;
    goto __pyx_L0;
 3016:     else:
+3017:         return cclm.mus_firmant(gen._ptr, insig)
  /*else*/ {
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_3 = PyFloat_FromDouble(mus_firmant(__pyx_v_gen->_ptr, __pyx_v_insig)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3017, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_r = __pyx_t_3;
    __pyx_t_3 = 0;
    goto __pyx_L0;
  }
 3018: 
+3019: cpdef is_firmant(gen: mus_any):
static PyObject *__pyx_pw_8pysndlib_3clm_327is_firmant(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyObject *__pyx_f_8pysndlib_3clm_is_firmant(struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen, CYTHON_UNUSED int __pyx_skip_dispatch) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_firmant", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pysndlib.clm.is_firmant", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_327is_firmant(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_326is_firmant, "\n    returns True if gen is a firmant.\n    \n    :param gen: gen\n    :rtype: bool\n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_327is_firmant = {"is_firmant", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_327is_firmant, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_326is_firmant};
static PyObject *__pyx_pw_8pysndlib_3clm_327is_firmant(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_firmant (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_gen,0};
    PyObject* values[1] = {0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_gen)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 3019, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "is_firmant") < 0)) __PYX_ERR(0, 3019, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
    }
    __pyx_v_gen = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)values[0]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("is_firmant", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 3019, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.is_firmant", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_gen), __pyx_ptype_8pysndlib_3clm_mus_any, 0, "gen", 0))) __PYX_ERR(0, 3019, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pysndlib_3clm_326is_firmant(__pyx_self, __pyx_v_gen);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_326is_firmant(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_firmant", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_8pysndlib_3clm_is_firmant(__pyx_v_gen, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3019, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pysndlib.clm.is_firmant", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_41 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 3019, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  if (PyDict_SetItem(__pyx_t_41, __pyx_n_s_gen, __pyx_n_s_mus_any) < 0) __PYX_ERR(0, 3019, __pyx_L1_error)
  __pyx_t_40 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_327is_firmant, 0, __pyx_n_s_is_firmant, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__378)); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 3019, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_40, __pyx_t_41);
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_is_firmant, __pyx_t_40) < 0) __PYX_ERR(0, 3019, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
/* … */
  __pyx_codeobj__378 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__46, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_is_firmant, 3019, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__378)) __PYX_ERR(0, 3019, __pyx_L1_error)
 3020:     """
 3021:     returns True if gen is a firmant.
 3022:     
 3023:     :param gen: gen
 3024:     :rtype: bool
 3025:     """
+3026:     return cclm.mus_is_firmant(gen._ptr)
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyBool_FromLong(mus_is_firmant(__pyx_v_gen->_ptr)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3026, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 3027: 
 3028: # ---------------- filter ---------------- #
+3029: cpdef mus_any make_filter(order: int, xcoeffs, ycoeffs):
static PyObject *__pyx_pw_8pysndlib_3clm_329make_filter(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_f_8pysndlib_3clm_make_filter(PyObject *__pyx_v_order, PyObject *__pyx_v_xcoeffs, PyObject *__pyx_v_ycoeffs, CYTHON_UNUSED int __pyx_skip_dispatch) {
  __Pyx_memviewslice __pyx_v_xcoeffs_view = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_ycoeffs_view = { 0, 0, { 0 }, { 0 }, { 0 } };
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen = NULL;
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("make_filter", 0);
  __Pyx_INCREF(__pyx_v_xcoeffs);
  __Pyx_INCREF(__pyx_v_ycoeffs);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __PYX_XCLEAR_MEMVIEW(&__pyx_t_1, 1);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_AddTraceback("pysndlib.clm.make_filter", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __PYX_XCLEAR_MEMVIEW(&__pyx_v_xcoeffs_view, 1);
  __PYX_XCLEAR_MEMVIEW(&__pyx_v_ycoeffs_view, 1);
  __Pyx_XDECREF((PyObject *)__pyx_v_gen);
  __Pyx_XDECREF(__pyx_v_xcoeffs);
  __Pyx_XDECREF(__pyx_v_ycoeffs);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_329make_filter(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_328make_filter, "\n    return a new direct form fir/iir filter, coeff args are list/ndarray.\n    \n    :param order: filter order\n    :param xcoeffs: x coeffs\n    :param ycoeffs: y coeffs\n    :return: filter gen\n    :rtype: mus_any\n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_329make_filter = {"make_filter", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_329make_filter, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_328make_filter};
static PyObject *__pyx_pw_8pysndlib_3clm_329make_filter(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_order = 0;
  PyObject *__pyx_v_xcoeffs = 0;
  PyObject *__pyx_v_ycoeffs = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("make_filter (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_order,&__pyx_n_s_xcoeffs,&__pyx_n_s_ycoeffs,0};
    PyObject* values[3] = {0,0,0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_order)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 3029, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_xcoeffs)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 3029, __pyx_L3_error)
        else {
          __Pyx_RaiseArgtupleInvalid("make_filter", 1, 3, 3, 1); __PYX_ERR(0, 3029, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_ycoeffs)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 3029, __pyx_L3_error)
        else {
          __Pyx_RaiseArgtupleInvalid("make_filter", 1, 3, 3, 2); __PYX_ERR(0, 3029, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "make_filter") < 0)) __PYX_ERR(0, 3029, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 3)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
      values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
      values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
    }
    __pyx_v_order = ((PyObject*)values[0]);
    __pyx_v_xcoeffs = values[1];
    __pyx_v_ycoeffs = values[2];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("make_filter", 1, 3, 3, __pyx_nargs); __PYX_ERR(0, 3029, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.make_filter", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_order), (&PyInt_Type), 0, "order", 1))) __PYX_ERR(0, 3029, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pysndlib_3clm_328make_filter(__pyx_self, __pyx_v_order, __pyx_v_xcoeffs, __pyx_v_ycoeffs);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_328make_filter(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_order, PyObject *__pyx_v_xcoeffs, PyObject *__pyx_v_ycoeffs) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("make_filter", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = ((PyObject *)__pyx_f_8pysndlib_3clm_make_filter(__pyx_v_order, __pyx_v_xcoeffs, __pyx_v_ycoeffs, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3029, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pysndlib.clm.make_filter", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__379 = PyTuple_Pack(3, __pyx_n_s_order, __pyx_n_s_xcoeffs, __pyx_n_s_ycoeffs); if (unlikely(!__pyx_tuple__379)) __PYX_ERR(0, 3029, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__379);
  __Pyx_GIVEREF(__pyx_tuple__379);
/* … */
  __pyx_t_40 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 3029, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  if (PyDict_SetItem(__pyx_t_40, __pyx_n_s_order, __pyx_n_s_int_2) < 0) __PYX_ERR(0, 3029, __pyx_L1_error)
  __pyx_t_41 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_329make_filter, 0, __pyx_n_s_make_filter, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__380)); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 3029, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_41, __pyx_t_40);
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_make_filter, __pyx_t_41) < 0) __PYX_ERR(0, 3029, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
  __pyx_codeobj__380 = (PyObject*)__Pyx_PyCode_New(3, 0, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__379, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_make_filter, 3029, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__380)) __PYX_ERR(0, 3029, __pyx_L1_error)
 3030:     """
 3031:     return a new direct form fir/iir filter, coeff args are list/ndarray.
 3032:     
 3033:     :param order: filter order
 3034:     :param xcoeffs: x coeffs
 3035:     :param ycoeffs: y coeffs
 3036:     :return: filter gen
 3037:     :rtype: mus_any
 3038:     """
+3039:     cdef double [:] xcoeffs_view = None
  __pyx_t_1 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(Py_None, PyBUF_WRITABLE); if (unlikely(!__pyx_t_1.memview)) __PYX_ERR(0, 3039, __pyx_L1_error)
  __pyx_v_xcoeffs_view = __pyx_t_1;
  __pyx_t_1.memview = NULL;
  __pyx_t_1.data = NULL;
+3040:     cdef double [:] ycoeffs_view = None
  __pyx_t_1 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(Py_None, PyBUF_WRITABLE); if (unlikely(!__pyx_t_1.memview)) __PYX_ERR(0, 3040, __pyx_L1_error)
  __pyx_v_ycoeffs_view = __pyx_t_1;
  __pyx_t_1.memview = NULL;
  __pyx_t_1.data = NULL;
 3041: 
+3042:     if isinstance(xcoeffs, list):
  __pyx_t_2 = PyList_Check(__pyx_v_xcoeffs); 
  if (__pyx_t_2) {
/* … */
  }
+3043:         xcoeffs = np.array(xcoeffs, dtype=np.double)
    __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3043, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_array); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3043, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3043, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_INCREF(__pyx_v_xcoeffs);
    __Pyx_GIVEREF(__pyx_v_xcoeffs);
    PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_xcoeffs);
    __pyx_t_5 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3043, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_np); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3043, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_double); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3043, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_dtype, __pyx_t_7) < 0) __PYX_ERR(0, 3043, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_3, __pyx_t_5); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3043, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF_SET(__pyx_v_xcoeffs, __pyx_t_7);
    __pyx_t_7 = 0;
 3044: 
+3045:     if isinstance(ycoeffs, list):
  __pyx_t_2 = PyList_Check(__pyx_v_ycoeffs); 
  if (__pyx_t_2) {
/* … */
  }
+3046:         ycoeffs = np.array(ycoeffs, dtype=np.double)
    __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_np); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3046, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_array); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3046, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __pyx_t_7 = PyTuple_New(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3046, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_INCREF(__pyx_v_ycoeffs);
    __Pyx_GIVEREF(__pyx_v_ycoeffs);
    PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_v_ycoeffs);
    __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3046, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3046, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_double); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3046, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_dtype, __pyx_t_6) < 0) __PYX_ERR(0, 3046, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_7, __pyx_t_3); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3046, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF_SET(__pyx_v_ycoeffs, __pyx_t_6);
    __pyx_t_6 = 0;
 3047: 
+3048:     xcoeffs_view = xcoeffs
  __pyx_t_1 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_xcoeffs, PyBUF_WRITABLE); if (unlikely(!__pyx_t_1.memview)) __PYX_ERR(0, 3048, __pyx_L1_error)
  __PYX_XCLEAR_MEMVIEW(&__pyx_v_xcoeffs_view, 1);
  __pyx_v_xcoeffs_view = __pyx_t_1;
  __pyx_t_1.memview = NULL;
  __pyx_t_1.data = NULL;
+3049:     ycoeffs_view = ycoeffs
  __pyx_t_1 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_ycoeffs, PyBUF_WRITABLE); if (unlikely(!__pyx_t_1.memview)) __PYX_ERR(0, 3049, __pyx_L1_error)
  __PYX_XCLEAR_MEMVIEW(&__pyx_v_ycoeffs_view, 1);
  __pyx_v_ycoeffs_view = __pyx_t_1;
  __pyx_t_1.memview = NULL;
  __pyx_t_1.data = NULL;
 3050: 
+3051:     gen =  mus_any.from_ptr(cclm.mus_make_filter(order, &xcoeffs_view[0], &ycoeffs_view[0], NULL))
  __pyx_t_8 = __Pyx_PyInt_As_int(__pyx_v_order); if (unlikely((__pyx_t_8 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 3051, __pyx_L1_error)
  __pyx_t_9 = 0;
  __pyx_t_10 = -1;
  if (__pyx_t_9 < 0) {
    __pyx_t_9 += __pyx_v_xcoeffs_view.shape[0];
    if (unlikely(__pyx_t_9 < 0)) __pyx_t_10 = 0;
  } else if (unlikely(__pyx_t_9 >= __pyx_v_xcoeffs_view.shape[0])) __pyx_t_10 = 0;
  if (unlikely(__pyx_t_10 != -1)) {
    __Pyx_RaiseBufferIndexError(__pyx_t_10);
    __PYX_ERR(0, 3051, __pyx_L1_error)
  }
  __pyx_t_11 = 0;
  __pyx_t_10 = -1;
  if (__pyx_t_11 < 0) {
    __pyx_t_11 += __pyx_v_ycoeffs_view.shape[0];
    if (unlikely(__pyx_t_11 < 0)) __pyx_t_10 = 0;
  } else if (unlikely(__pyx_t_11 >= __pyx_v_ycoeffs_view.shape[0])) __pyx_t_10 = 0;
  if (unlikely(__pyx_t_10 != -1)) {
    __Pyx_RaiseBufferIndexError(__pyx_t_10);
    __PYX_ERR(0, 3051, __pyx_L1_error)
  }
  __pyx_t_6 = ((PyObject *)__pyx_vtabptr_8pysndlib_3clm_mus_any->from_ptr(mus_make_filter(__pyx_t_8, (&(*((double *) ( /* dim=0 */ (__pyx_v_xcoeffs_view.data + __pyx_t_9 * __pyx_v_xcoeffs_view.strides[0]) )))), (&(*((double *) ( /* dim=0 */ (__pyx_v_ycoeffs_view.data + __pyx_t_11 * __pyx_v_ycoeffs_view.strides[0]) )))), NULL), NULL)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3051, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_v_gen = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)__pyx_t_6);
  __pyx_t_6 = 0;
 3052: 
+3053:     gen.cache_extend([xcoeffs, ycoeffs])
  __pyx_t_6 = PyList_New(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3053, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_INCREF(__pyx_v_xcoeffs);
  __Pyx_GIVEREF(__pyx_v_xcoeffs);
  PyList_SET_ITEM(__pyx_t_6, 0, __pyx_v_xcoeffs);
  __Pyx_INCREF(__pyx_v_ycoeffs);
  __Pyx_GIVEREF(__pyx_v_ycoeffs);
  PyList_SET_ITEM(__pyx_t_6, 1, __pyx_v_ycoeffs);
  __pyx_t_3 = ((struct __pyx_vtabstruct_8pysndlib_3clm_mus_any *)__pyx_v_gen->__pyx_vtab)->cache_extend(__pyx_v_gen, __pyx_t_6, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3053, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+3054:     return gen
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __Pyx_INCREF((PyObject *)__pyx_v_gen);
  __pyx_r = __pyx_v_gen;
  goto __pyx_L0;
 3055: 
+3056: cpdef cython.double filter(gen: mus_any, insig: float): # todo : conflicts with buitl in function
static PyObject *__pyx_pw_8pysndlib_3clm_331filter(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static double __pyx_f_8pysndlib_3clm_filter(struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen, double __pyx_v_insig, CYTHON_UNUSED int __pyx_skip_dispatch) {
  double __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("filter", 0);
/* … */
  /* function exit code */
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_331filter(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_330filter, "\n    next sample from filter.\n    \n    :param gen: filter gen\n    :param insig: input value\n    :rtype: float\n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_331filter = {"filter", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_331filter, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_330filter};
static PyObject *__pyx_pw_8pysndlib_3clm_331filter(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen = 0;
  double __pyx_v_insig;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("filter (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_gen,&__pyx_n_s_insig,0};
    PyObject* values[2] = {0,0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_gen)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 3056, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_insig)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 3056, __pyx_L3_error)
        else {
          __Pyx_RaiseArgtupleInvalid("filter", 1, 2, 2, 1); __PYX_ERR(0, 3056, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "filter") < 0)) __PYX_ERR(0, 3056, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 2)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
      values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
    }
    __pyx_v_gen = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)values[0]);
    __pyx_v_insig = __pyx_PyFloat_AsDouble(values[1]); if (unlikely((__pyx_v_insig == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 3056, __pyx_L3_error)
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("filter", 1, 2, 2, __pyx_nargs); __PYX_ERR(0, 3056, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.filter", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_gen), __pyx_ptype_8pysndlib_3clm_mus_any, 0, "gen", 0))) __PYX_ERR(0, 3056, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pysndlib_3clm_330filter(__pyx_self, __pyx_v_gen, __pyx_v_insig);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_330filter(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen, double __pyx_v_insig) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("filter", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_8pysndlib_3clm_filter(__pyx_v_gen, __pyx_v_insig, 0); if (unlikely(__pyx_t_1 == ((double)-1) && PyErr_Occurred())) __PYX_ERR(0, 3056, __pyx_L1_error)
  __pyx_t_2 = PyFloat_FromDouble(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3056, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pysndlib.clm.filter", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_41 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 3056, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  if (PyDict_SetItem(__pyx_t_41, __pyx_n_s_gen, __pyx_n_s_mus_any) < 0) __PYX_ERR(0, 3056, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_41, __pyx_n_s_insig, __pyx_n_s_float) < 0) __PYX_ERR(0, 3056, __pyx_L1_error)
  __pyx_t_40 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_331filter, 0, __pyx_n_s_filter, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__381)); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 3056, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_40, __pyx_t_41);
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_filter, __pyx_t_40) < 0) __PYX_ERR(0, 3056, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
/* … */
  __pyx_codeobj__381 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__350, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_filter, 3056, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__381)) __PYX_ERR(0, 3056, __pyx_L1_error)
 3057:     """
 3058:     next sample from filter.
 3059:     
 3060:     :param gen: filter gen
 3061:     :param insig: input value
 3062:     :rtype: float
 3063:     """
+3064:     return cclm.mus_filter(gen._ptr, insig)
  __pyx_r = mus_filter(__pyx_v_gen->_ptr, __pyx_v_insig);
  goto __pyx_L0;
 3065: 
+3066: cpdef bint is_filter(gen: mus_any):
static PyObject *__pyx_pw_8pysndlib_3clm_333is_filter(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static int __pyx_f_8pysndlib_3clm_is_filter(struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen, CYTHON_UNUSED int __pyx_skip_dispatch) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_filter", 0);
/* … */
  /* function exit code */
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_333is_filter(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_332is_filter, "\n    returns True if gen is a filter.\n    \n    :param gen: gen\n    :rtype: bool\n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_333is_filter = {"is_filter", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_333is_filter, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_332is_filter};
static PyObject *__pyx_pw_8pysndlib_3clm_333is_filter(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_filter (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_gen,0};
    PyObject* values[1] = {0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_gen)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 3066, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "is_filter") < 0)) __PYX_ERR(0, 3066, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
    }
    __pyx_v_gen = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)values[0]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("is_filter", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 3066, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.is_filter", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_gen), __pyx_ptype_8pysndlib_3clm_mus_any, 0, "gen", 0))) __PYX_ERR(0, 3066, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pysndlib_3clm_332is_filter(__pyx_self, __pyx_v_gen);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_332is_filter(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_filter", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_8pysndlib_3clm_is_filter(__pyx_v_gen, 0); if (unlikely(__pyx_t_1 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 3066, __pyx_L1_error)
  __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3066, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pysndlib.clm.is_filter", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_40 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 3066, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  if (PyDict_SetItem(__pyx_t_40, __pyx_n_s_gen, __pyx_n_s_mus_any) < 0) __PYX_ERR(0, 3066, __pyx_L1_error)
  __pyx_t_41 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_333is_filter, 0, __pyx_n_s_is_filter, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__382)); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 3066, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_41, __pyx_t_40);
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_is_filter, __pyx_t_41) < 0) __PYX_ERR(0, 3066, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
/* … */
  __pyx_codeobj__382 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__46, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_is_filter, 3066, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__382)) __PYX_ERR(0, 3066, __pyx_L1_error)
 3067:     """
 3068:     returns True if gen is a filter.
 3069:     
 3070:     :param gen: gen
 3071:     :rtype: bool
 3072:     """
+3073:     return cclm.mus_is_filter(gen._ptr)
  __pyx_r = mus_is_filter(__pyx_v_gen->_ptr);
  goto __pyx_L0;
 3074: 
 3075: # ---------------- fir-filter ---------------- #
+3076: cpdef mus_any make_fir_filter(order: int, xcoeffs):
static PyObject *__pyx_pw_8pysndlib_3clm_335make_fir_filter(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_f_8pysndlib_3clm_make_fir_filter(PyObject *__pyx_v_order, PyObject *__pyx_v_xcoeffs, CYTHON_UNUSED int __pyx_skip_dispatch) {
  __Pyx_memviewslice __pyx_v_xcoeffs_view = { 0, 0, { 0 }, { 0 }, { 0 } };
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen = NULL;
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("make_fir_filter", 0);
  __Pyx_INCREF(__pyx_v_xcoeffs);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __PYX_XCLEAR_MEMVIEW(&__pyx_t_1, 1);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_AddTraceback("pysndlib.clm.make_fir_filter", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __PYX_XCLEAR_MEMVIEW(&__pyx_v_xcoeffs_view, 1);
  __Pyx_XDECREF((PyObject *)__pyx_v_gen);
  __Pyx_XDECREF(__pyx_v_xcoeffs);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_335make_fir_filter(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_334make_fir_filter, "\n    return a new fir filter, xcoeffs a list/ndarray.\n    \n    :param order: filter order\n    :param xcoeffs: x coeffs\n    :return: fir_filter gen\n    :rtype: mus_any\n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_335make_fir_filter = {"make_fir_filter", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_335make_fir_filter, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_334make_fir_filter};
static PyObject *__pyx_pw_8pysndlib_3clm_335make_fir_filter(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_order = 0;
  PyObject *__pyx_v_xcoeffs = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("make_fir_filter (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_order,&__pyx_n_s_xcoeffs,0};
    PyObject* values[2] = {0,0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_order)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 3076, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_xcoeffs)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 3076, __pyx_L3_error)
        else {
          __Pyx_RaiseArgtupleInvalid("make_fir_filter", 1, 2, 2, 1); __PYX_ERR(0, 3076, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "make_fir_filter") < 0)) __PYX_ERR(0, 3076, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 2)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
      values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
    }
    __pyx_v_order = ((PyObject*)values[0]);
    __pyx_v_xcoeffs = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("make_fir_filter", 1, 2, 2, __pyx_nargs); __PYX_ERR(0, 3076, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.make_fir_filter", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_order), (&PyInt_Type), 0, "order", 1))) __PYX_ERR(0, 3076, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pysndlib_3clm_334make_fir_filter(__pyx_self, __pyx_v_order, __pyx_v_xcoeffs);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_334make_fir_filter(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_order, PyObject *__pyx_v_xcoeffs) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("make_fir_filter", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = ((PyObject *)__pyx_f_8pysndlib_3clm_make_fir_filter(__pyx_v_order, __pyx_v_xcoeffs, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3076, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pysndlib.clm.make_fir_filter", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__383 = PyTuple_Pack(2, __pyx_n_s_order, __pyx_n_s_xcoeffs); if (unlikely(!__pyx_tuple__383)) __PYX_ERR(0, 3076, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__383);
  __Pyx_GIVEREF(__pyx_tuple__383);
/* … */
  __pyx_t_41 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 3076, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  if (PyDict_SetItem(__pyx_t_41, __pyx_n_s_order, __pyx_n_s_int_2) < 0) __PYX_ERR(0, 3076, __pyx_L1_error)
  __pyx_t_40 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_335make_fir_filter, 0, __pyx_n_s_make_fir_filter, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__384)); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 3076, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_40, __pyx_t_41);
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_make_fir_filter, __pyx_t_40) < 0) __PYX_ERR(0, 3076, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
  __pyx_codeobj__384 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__383, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_make_fir_filter, 3076, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__384)) __PYX_ERR(0, 3076, __pyx_L1_error)
 3077:     """
 3078:     return a new fir filter, xcoeffs a list/ndarray.
 3079:     
 3080:     :param order: filter order
 3081:     :param xcoeffs: x coeffs
 3082:     :return: fir_filter gen
 3083:     :rtype: mus_any
 3084:     """
+3085:     cdef double [:] xcoeffs_view = None
  __pyx_t_1 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(Py_None, PyBUF_WRITABLE); if (unlikely(!__pyx_t_1.memview)) __PYX_ERR(0, 3085, __pyx_L1_error)
  __pyx_v_xcoeffs_view = __pyx_t_1;
  __pyx_t_1.memview = NULL;
  __pyx_t_1.data = NULL;
 3086: 
+3087:     if isinstance(xcoeffs, list):
  __pyx_t_2 = PyList_Check(__pyx_v_xcoeffs); 
  if (__pyx_t_2) {
/* … */
  }
+3088:         xcoeffs = np.array(xcoeffs, dtype=np.double)
    __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3088, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_array); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3088, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3088, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_INCREF(__pyx_v_xcoeffs);
    __Pyx_GIVEREF(__pyx_v_xcoeffs);
    PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_xcoeffs);
    __pyx_t_5 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3088, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_np); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3088, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_double); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3088, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_dtype, __pyx_t_7) < 0) __PYX_ERR(0, 3088, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_3, __pyx_t_5); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3088, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF_SET(__pyx_v_xcoeffs, __pyx_t_7);
    __pyx_t_7 = 0;
 3089: 
+3090:     xcoeffs_view = xcoeffs
  __pyx_t_1 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_xcoeffs, PyBUF_WRITABLE); if (unlikely(!__pyx_t_1.memview)) __PYX_ERR(0, 3090, __pyx_L1_error)
  __PYX_XCLEAR_MEMVIEW(&__pyx_v_xcoeffs_view, 1);
  __pyx_v_xcoeffs_view = __pyx_t_1;
  __pyx_t_1.memview = NULL;
  __pyx_t_1.data = NULL;
 3091: 
+3092:     gen =  mus_any.from_ptr(cclm.mus_make_fir_filter(order, &xcoeffs_view[0], NULL))
  __pyx_t_8 = __Pyx_PyInt_As_int(__pyx_v_order); if (unlikely((__pyx_t_8 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 3092, __pyx_L1_error)
  __pyx_t_9 = 0;
  __pyx_t_10 = -1;
  if (__pyx_t_9 < 0) {
    __pyx_t_9 += __pyx_v_xcoeffs_view.shape[0];
    if (unlikely(__pyx_t_9 < 0)) __pyx_t_10 = 0;
  } else if (unlikely(__pyx_t_9 >= __pyx_v_xcoeffs_view.shape[0])) __pyx_t_10 = 0;
  if (unlikely(__pyx_t_10 != -1)) {
    __Pyx_RaiseBufferIndexError(__pyx_t_10);
    __PYX_ERR(0, 3092, __pyx_L1_error)
  }
  __pyx_t_7 = ((PyObject *)__pyx_vtabptr_8pysndlib_3clm_mus_any->from_ptr(mus_make_fir_filter(__pyx_t_8, (&(*((double *) ( /* dim=0 */ (__pyx_v_xcoeffs_view.data + __pyx_t_9 * __pyx_v_xcoeffs_view.strides[0]) )))), NULL), NULL)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3092, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __pyx_v_gen = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)__pyx_t_7);
  __pyx_t_7 = 0;
+3093:     gen.cache_append(xcoeffs)
  __pyx_t_7 = ((struct __pyx_vtabstruct_8pysndlib_3clm_mus_any *)__pyx_v_gen->__pyx_vtab)->cache_append(__pyx_v_gen, __pyx_v_xcoeffs, 0); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3093, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 3094: 
+3095:     return gen
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __Pyx_INCREF((PyObject *)__pyx_v_gen);
  __pyx_r = __pyx_v_gen;
  goto __pyx_L0;
 3096: 
+3097: cpdef cython.double fir_filter(gen: mus_any, insig: float):
static PyObject *__pyx_pw_8pysndlib_3clm_337fir_filter(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static double __pyx_f_8pysndlib_3clm_fir_filter(struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen, double __pyx_v_insig, CYTHON_UNUSED int __pyx_skip_dispatch) {
  double __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("fir_filter", 0);
/* … */
  /* function exit code */
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_337fir_filter(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_336fir_filter, "\n    next sample from fir filter.\n    \n    :param gen: fir_filter gen\n    :param insig: input value\n    :rtype: float\n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_337fir_filter = {"fir_filter", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_337fir_filter, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_336fir_filter};
static PyObject *__pyx_pw_8pysndlib_3clm_337fir_filter(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen = 0;
  double __pyx_v_insig;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("fir_filter (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_gen,&__pyx_n_s_insig,0};
    PyObject* values[2] = {0,0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_gen)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 3097, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_insig)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 3097, __pyx_L3_error)
        else {
          __Pyx_RaiseArgtupleInvalid("fir_filter", 1, 2, 2, 1); __PYX_ERR(0, 3097, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "fir_filter") < 0)) __PYX_ERR(0, 3097, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 2)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
      values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
    }
    __pyx_v_gen = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)values[0]);
    __pyx_v_insig = __pyx_PyFloat_AsDouble(values[1]); if (unlikely((__pyx_v_insig == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 3097, __pyx_L3_error)
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("fir_filter", 1, 2, 2, __pyx_nargs); __PYX_ERR(0, 3097, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.fir_filter", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_gen), __pyx_ptype_8pysndlib_3clm_mus_any, 0, "gen", 0))) __PYX_ERR(0, 3097, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pysndlib_3clm_336fir_filter(__pyx_self, __pyx_v_gen, __pyx_v_insig);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_336fir_filter(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen, double __pyx_v_insig) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("fir_filter", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_8pysndlib_3clm_fir_filter(__pyx_v_gen, __pyx_v_insig, 0); if (unlikely(__pyx_t_1 == ((double)-1) && PyErr_Occurred())) __PYX_ERR(0, 3097, __pyx_L1_error)
  __pyx_t_2 = PyFloat_FromDouble(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3097, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pysndlib.clm.fir_filter", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_40 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 3097, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  if (PyDict_SetItem(__pyx_t_40, __pyx_n_s_gen, __pyx_n_s_mus_any) < 0) __PYX_ERR(0, 3097, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_40, __pyx_n_s_insig, __pyx_n_s_float) < 0) __PYX_ERR(0, 3097, __pyx_L1_error)
  __pyx_t_41 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_337fir_filter, 0, __pyx_n_s_fir_filter, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__385)); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 3097, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_41, __pyx_t_40);
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_fir_filter, __pyx_t_41) < 0) __PYX_ERR(0, 3097, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
/* … */
  __pyx_codeobj__385 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__350, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_fir_filter, 3097, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__385)) __PYX_ERR(0, 3097, __pyx_L1_error)
 3098:     """
 3099:     next sample from fir filter.
 3100:     
 3101:     :param gen: fir_filter gen
 3102:     :param insig: input value
 3103:     :rtype: float
 3104:     """
+3105:     return cclm.mus_fir_filter(gen._ptr, insig)
  __pyx_r = mus_fir_filter(__pyx_v_gen->_ptr, __pyx_v_insig);
  goto __pyx_L0;
 3106: 
+3107: cpdef bint is_fir_filter(gen: mus_any):
static PyObject *__pyx_pw_8pysndlib_3clm_339is_fir_filter(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static int __pyx_f_8pysndlib_3clm_is_fir_filter(struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen, CYTHON_UNUSED int __pyx_skip_dispatch) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_fir_filter", 0);
/* … */
  /* function exit code */
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_339is_fir_filter(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_338is_fir_filter, "\n    returns True if gen is a fir_filter.\n    \n    :param gen: gen\n    :rtype: bool\n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_339is_fir_filter = {"is_fir_filter", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_339is_fir_filter, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_338is_fir_filter};
static PyObject *__pyx_pw_8pysndlib_3clm_339is_fir_filter(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_fir_filter (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_gen,0};
    PyObject* values[1] = {0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_gen)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 3107, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "is_fir_filter") < 0)) __PYX_ERR(0, 3107, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
    }
    __pyx_v_gen = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)values[0]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("is_fir_filter", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 3107, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.is_fir_filter", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_gen), __pyx_ptype_8pysndlib_3clm_mus_any, 0, "gen", 0))) __PYX_ERR(0, 3107, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pysndlib_3clm_338is_fir_filter(__pyx_self, __pyx_v_gen);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_338is_fir_filter(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_fir_filter", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_8pysndlib_3clm_is_fir_filter(__pyx_v_gen, 0); if (unlikely(__pyx_t_1 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 3107, __pyx_L1_error)
  __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3107, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pysndlib.clm.is_fir_filter", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_41 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 3107, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  if (PyDict_SetItem(__pyx_t_41, __pyx_n_s_gen, __pyx_n_s_mus_any) < 0) __PYX_ERR(0, 3107, __pyx_L1_error)
  __pyx_t_40 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_339is_fir_filter, 0, __pyx_n_s_is_fir_filter, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__386)); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 3107, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_40, __pyx_t_41);
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_is_fir_filter, __pyx_t_40) < 0) __PYX_ERR(0, 3107, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
/* … */
  __pyx_codeobj__386 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__46, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_is_fir_filter, 3107, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__386)) __PYX_ERR(0, 3107, __pyx_L1_error)
 3108:     """
 3109:     returns True if gen is a fir_filter.
 3110:     
 3111:     :param gen: gen
 3112:     :rtype: bool
 3113:     """
+3114:     return cclm.mus_is_fir_filter(gen._ptr)
  __pyx_r = mus_is_fir_filter(__pyx_v_gen->_ptr);
  goto __pyx_L0;
 3115: 
 3116: 
 3117: # ---------------- iir-filter ---------------- #
+3118: cpdef mus_any make_iir_filter(order: int, ycoeffs):
static PyObject *__pyx_pw_8pysndlib_3clm_341make_iir_filter(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_f_8pysndlib_3clm_make_iir_filter(PyObject *__pyx_v_order, PyObject *__pyx_v_ycoeffs, CYTHON_UNUSED int __pyx_skip_dispatch) {
  __Pyx_memviewslice __pyx_v_ycoeffs_view = { 0, 0, { 0 }, { 0 }, { 0 } };
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen = NULL;
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("make_iir_filter", 0);
  __Pyx_INCREF(__pyx_v_ycoeffs);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __PYX_XCLEAR_MEMVIEW(&__pyx_t_1, 1);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_AddTraceback("pysndlib.clm.make_iir_filter", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __PYX_XCLEAR_MEMVIEW(&__pyx_v_ycoeffs_view, 1);
  __Pyx_XDECREF((PyObject *)__pyx_v_gen);
  __Pyx_XDECREF(__pyx_v_ycoeffs);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_341make_iir_filter(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_340make_iir_filter, "\n    return a new iir filter, ycoeffs a list/ndarray.\n    \n    :param order: filter order\n    :param ycoeffs: y coeffs\n    :return: iir_filter gen\n    :rtype: mus_any\n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_341make_iir_filter = {"make_iir_filter", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_341make_iir_filter, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_340make_iir_filter};
static PyObject *__pyx_pw_8pysndlib_3clm_341make_iir_filter(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_order = 0;
  PyObject *__pyx_v_ycoeffs = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("make_iir_filter (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_order,&__pyx_n_s_ycoeffs,0};
    PyObject* values[2] = {0,0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_order)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 3118, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_ycoeffs)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 3118, __pyx_L3_error)
        else {
          __Pyx_RaiseArgtupleInvalid("make_iir_filter", 1, 2, 2, 1); __PYX_ERR(0, 3118, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "make_iir_filter") < 0)) __PYX_ERR(0, 3118, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 2)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
      values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
    }
    __pyx_v_order = ((PyObject*)values[0]);
    __pyx_v_ycoeffs = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("make_iir_filter", 1, 2, 2, __pyx_nargs); __PYX_ERR(0, 3118, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.make_iir_filter", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_order), (&PyInt_Type), 0, "order", 1))) __PYX_ERR(0, 3118, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pysndlib_3clm_340make_iir_filter(__pyx_self, __pyx_v_order, __pyx_v_ycoeffs);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_340make_iir_filter(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_order, PyObject *__pyx_v_ycoeffs) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("make_iir_filter", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = ((PyObject *)__pyx_f_8pysndlib_3clm_make_iir_filter(__pyx_v_order, __pyx_v_ycoeffs, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3118, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pysndlib.clm.make_iir_filter", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__387 = PyTuple_Pack(2, __pyx_n_s_order, __pyx_n_s_ycoeffs); if (unlikely(!__pyx_tuple__387)) __PYX_ERR(0, 3118, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__387);
  __Pyx_GIVEREF(__pyx_tuple__387);
/* … */
  __pyx_t_40 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 3118, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  if (PyDict_SetItem(__pyx_t_40, __pyx_n_s_order, __pyx_n_s_int_2) < 0) __PYX_ERR(0, 3118, __pyx_L1_error)
  __pyx_t_41 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_341make_iir_filter, 0, __pyx_n_s_make_iir_filter, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__388)); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 3118, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_41, __pyx_t_40);
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_make_iir_filter, __pyx_t_41) < 0) __PYX_ERR(0, 3118, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
  __pyx_codeobj__388 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__387, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_make_iir_filter, 3118, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__388)) __PYX_ERR(0, 3118, __pyx_L1_error)
 3119:     """
 3120:     return a new iir filter, ycoeffs a list/ndarray.
 3121:     
 3122:     :param order: filter order
 3123:     :param ycoeffs: y coeffs
 3124:     :return: iir_filter gen
 3125:     :rtype: mus_any
 3126:     """
+3127:     cdef double [:] ycoeffs_view = None
  __pyx_t_1 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(Py_None, PyBUF_WRITABLE); if (unlikely(!__pyx_t_1.memview)) __PYX_ERR(0, 3127, __pyx_L1_error)
  __pyx_v_ycoeffs_view = __pyx_t_1;
  __pyx_t_1.memview = NULL;
  __pyx_t_1.data = NULL;
 3128: 
+3129:     if isinstance(ycoeffs, list):
  __pyx_t_2 = PyList_Check(__pyx_v_ycoeffs); 
  if (__pyx_t_2) {
/* … */
  }
+3130:         ycoeffs = np.array(ycoeffs, dtype=np.double)
    __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3130, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_array); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3130, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3130, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_INCREF(__pyx_v_ycoeffs);
    __Pyx_GIVEREF(__pyx_v_ycoeffs);
    PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_ycoeffs);
    __pyx_t_5 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3130, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_np); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3130, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_double); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3130, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_dtype, __pyx_t_7) < 0) __PYX_ERR(0, 3130, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_3, __pyx_t_5); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3130, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF_SET(__pyx_v_ycoeffs, __pyx_t_7);
    __pyx_t_7 = 0;
 3131: 
+3132:     ycoeffs_view = ycoeffs
  __pyx_t_1 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_ycoeffs, PyBUF_WRITABLE); if (unlikely(!__pyx_t_1.memview)) __PYX_ERR(0, 3132, __pyx_L1_error)
  __PYX_XCLEAR_MEMVIEW(&__pyx_v_ycoeffs_view, 1);
  __pyx_v_ycoeffs_view = __pyx_t_1;
  __pyx_t_1.memview = NULL;
  __pyx_t_1.data = NULL;
 3133: 
 3134: 
+3135:     gen = mus_any.from_ptr(cclm.mus_make_iir_filter(order, &ycoeffs_view[0], NULL))
  __pyx_t_8 = __Pyx_PyInt_As_int(__pyx_v_order); if (unlikely((__pyx_t_8 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 3135, __pyx_L1_error)
  __pyx_t_9 = 0;
  __pyx_t_10 = -1;
  if (__pyx_t_9 < 0) {
    __pyx_t_9 += __pyx_v_ycoeffs_view.shape[0];
    if (unlikely(__pyx_t_9 < 0)) __pyx_t_10 = 0;
  } else if (unlikely(__pyx_t_9 >= __pyx_v_ycoeffs_view.shape[0])) __pyx_t_10 = 0;
  if (unlikely(__pyx_t_10 != -1)) {
    __Pyx_RaiseBufferIndexError(__pyx_t_10);
    __PYX_ERR(0, 3135, __pyx_L1_error)
  }
  __pyx_t_7 = ((PyObject *)__pyx_vtabptr_8pysndlib_3clm_mus_any->from_ptr(mus_make_iir_filter(__pyx_t_8, (&(*((double *) ( /* dim=0 */ (__pyx_v_ycoeffs_view.data + __pyx_t_9 * __pyx_v_ycoeffs_view.strides[0]) )))), NULL), NULL)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3135, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __pyx_v_gen = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)__pyx_t_7);
  __pyx_t_7 = 0;
+3136:     gen.cache_append(ycoeffs)
  __pyx_t_7 = ((struct __pyx_vtabstruct_8pysndlib_3clm_mus_any *)__pyx_v_gen->__pyx_vtab)->cache_append(__pyx_v_gen, __pyx_v_ycoeffs, 0); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3136, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+3137:     return gen
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __Pyx_INCREF((PyObject *)__pyx_v_gen);
  __pyx_r = __pyx_v_gen;
  goto __pyx_L0;
 3138: 
+3139: cpdef cython.double iir_filter(gen: mus_any, insig: float ):
static PyObject *__pyx_pw_8pysndlib_3clm_343iir_filter(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static double __pyx_f_8pysndlib_3clm_iir_filter(struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen, double __pyx_v_insig, CYTHON_UNUSED int __pyx_skip_dispatch) {
  double __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("iir_filter", 0);
/* … */
  /* function exit code */
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_343iir_filter(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_342iir_filter, "\n    next sample from iir filter.\n    \n    :param gen: iir_filter gen\n    :param insig: input value\n    :rtype: float\n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_343iir_filter = {"iir_filter", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_343iir_filter, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_342iir_filter};
static PyObject *__pyx_pw_8pysndlib_3clm_343iir_filter(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen = 0;
  double __pyx_v_insig;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("iir_filter (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_gen,&__pyx_n_s_insig,0};
    PyObject* values[2] = {0,0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_gen)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 3139, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_insig)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 3139, __pyx_L3_error)
        else {
          __Pyx_RaiseArgtupleInvalid("iir_filter", 1, 2, 2, 1); __PYX_ERR(0, 3139, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "iir_filter") < 0)) __PYX_ERR(0, 3139, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 2)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
      values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
    }
    __pyx_v_gen = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)values[0]);
    __pyx_v_insig = __pyx_PyFloat_AsDouble(values[1]); if (unlikely((__pyx_v_insig == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 3139, __pyx_L3_error)
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("iir_filter", 1, 2, 2, __pyx_nargs); __PYX_ERR(0, 3139, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.iir_filter", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_gen), __pyx_ptype_8pysndlib_3clm_mus_any, 0, "gen", 0))) __PYX_ERR(0, 3139, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pysndlib_3clm_342iir_filter(__pyx_self, __pyx_v_gen, __pyx_v_insig);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_342iir_filter(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen, double __pyx_v_insig) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("iir_filter", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_8pysndlib_3clm_iir_filter(__pyx_v_gen, __pyx_v_insig, 0); if (unlikely(__pyx_t_1 == ((double)-1) && PyErr_Occurred())) __PYX_ERR(0, 3139, __pyx_L1_error)
  __pyx_t_2 = PyFloat_FromDouble(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3139, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pysndlib.clm.iir_filter", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_41 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 3139, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  if (PyDict_SetItem(__pyx_t_41, __pyx_n_s_gen, __pyx_n_s_mus_any) < 0) __PYX_ERR(0, 3139, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_41, __pyx_n_s_insig, __pyx_n_s_float) < 0) __PYX_ERR(0, 3139, __pyx_L1_error)
  __pyx_t_40 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_343iir_filter, 0, __pyx_n_s_iir_filter, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__389)); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 3139, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_40, __pyx_t_41);
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_iir_filter, __pyx_t_40) < 0) __PYX_ERR(0, 3139, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
/* … */
  __pyx_codeobj__389 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__350, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_iir_filter, 3139, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__389)) __PYX_ERR(0, 3139, __pyx_L1_error)
 3140:     """
 3141:     next sample from iir filter.
 3142:     
 3143:     :param gen: iir_filter gen
 3144:     :param insig: input value
 3145:     :rtype: float
 3146:     """
+3147:     return cclm.mus_iir_filter(gen._ptr, insig)
  __pyx_r = mus_iir_filter(__pyx_v_gen->_ptr, __pyx_v_insig);
  goto __pyx_L0;
 3148: 
+3149: cpdef bint is_iir_filter(gen: mus_any):
static PyObject *__pyx_pw_8pysndlib_3clm_345is_iir_filter(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static int __pyx_f_8pysndlib_3clm_is_iir_filter(struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen, CYTHON_UNUSED int __pyx_skip_dispatch) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_iir_filter", 0);
/* … */
  /* function exit code */
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_345is_iir_filter(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_344is_iir_filter, "\n    returns True if gen is a iir_filter\n    :param gen: gen\n    :rtype: bool\n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_345is_iir_filter = {"is_iir_filter", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_345is_iir_filter, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_344is_iir_filter};
static PyObject *__pyx_pw_8pysndlib_3clm_345is_iir_filter(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_iir_filter (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_gen,0};
    PyObject* values[1] = {0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_gen)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 3149, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "is_iir_filter") < 0)) __PYX_ERR(0, 3149, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
    }
    __pyx_v_gen = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)values[0]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("is_iir_filter", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 3149, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.is_iir_filter", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_gen), __pyx_ptype_8pysndlib_3clm_mus_any, 0, "gen", 0))) __PYX_ERR(0, 3149, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pysndlib_3clm_344is_iir_filter(__pyx_self, __pyx_v_gen);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_344is_iir_filter(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_iir_filter", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_8pysndlib_3clm_is_iir_filter(__pyx_v_gen, 0); if (unlikely(__pyx_t_1 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 3149, __pyx_L1_error)
  __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3149, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pysndlib.clm.is_iir_filter", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_40 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 3149, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  if (PyDict_SetItem(__pyx_t_40, __pyx_n_s_gen, __pyx_n_s_mus_any) < 0) __PYX_ERR(0, 3149, __pyx_L1_error)
  __pyx_t_41 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_345is_iir_filter, 0, __pyx_n_s_is_iir_filter, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__390)); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 3149, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_41, __pyx_t_40);
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_is_iir_filter, __pyx_t_41) < 0) __PYX_ERR(0, 3149, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
/* … */
  __pyx_codeobj__390 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__46, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_is_iir_filter, 3149, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__390)) __PYX_ERR(0, 3149, __pyx_L1_error)
 3150:     """
 3151:     returns True if gen is a iir_filter
 3152:     :param gen: gen
 3153:     :rtype: bool
 3154:     """
+3155:     return cclm.mus_is_iir_filter(gen._ptr)
  __pyx_r = mus_is_iir_filter(__pyx_v_gen->_ptr);
  goto __pyx_L0;
 3156: 
+3157: cpdef np.ndarray make_fir_coeffs(order: int, envelope):
static PyObject *__pyx_pw_8pysndlib_3clm_347make_fir_coeffs(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyArrayObject *__pyx_f_8pysndlib_3clm_make_fir_coeffs(PyObject *__pyx_v_order, PyObject *__pyx_v_envelope, CYTHON_UNUSED int __pyx_skip_dispatch) {
  __Pyx_memviewslice __pyx_v_envelope_view = { 0, 0, { 0 }, { 0 }, { 0 } };
  PyObject *__pyx_v_coeffs = NULL;
  __Pyx_memviewslice __pyx_v_coeffs_view = { 0, 0, { 0 }, { 0 }, { 0 } };
  PyArrayObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("make_fir_coeffs", 0);
  __Pyx_INCREF(__pyx_v_envelope);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __PYX_XCLEAR_MEMVIEW(&__pyx_t_1, 1);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_AddTraceback("pysndlib.clm.make_fir_coeffs", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __PYX_XCLEAR_MEMVIEW(&__pyx_v_envelope_view, 1);
  __Pyx_XDECREF(__pyx_v_coeffs);
  __PYX_XCLEAR_MEMVIEW(&__pyx_v_coeffs_view, 1);
  __Pyx_XDECREF(__pyx_v_envelope);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_347make_fir_coeffs(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_346make_fir_coeffs, "\n    translates a frequency response envelope (actually, evenly spaced points \\in a float-vector) into\n    the corresponding FIR filter coefficients. The order of the filter determines how close you get to the\n    envelope.\n    \n    :param order: order of the filter\n    :param envelope: response envelope\n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_347make_fir_coeffs = {"make_fir_coeffs", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_347make_fir_coeffs, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_346make_fir_coeffs};
static PyObject *__pyx_pw_8pysndlib_3clm_347make_fir_coeffs(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_order = 0;
  PyObject *__pyx_v_envelope = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("make_fir_coeffs (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_order,&__pyx_n_s_envelope,0};
    PyObject* values[2] = {0,0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_order)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 3157, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_envelope)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 3157, __pyx_L3_error)
        else {
          __Pyx_RaiseArgtupleInvalid("make_fir_coeffs", 1, 2, 2, 1); __PYX_ERR(0, 3157, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "make_fir_coeffs") < 0)) __PYX_ERR(0, 3157, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 2)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
      values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
    }
    __pyx_v_order = ((PyObject*)values[0]);
    __pyx_v_envelope = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("make_fir_coeffs", 1, 2, 2, __pyx_nargs); __PYX_ERR(0, 3157, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.make_fir_coeffs", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_order), (&PyInt_Type), 0, "order", 1))) __PYX_ERR(0, 3157, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pysndlib_3clm_346make_fir_coeffs(__pyx_self, __pyx_v_order, __pyx_v_envelope);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_346make_fir_coeffs(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_order, PyObject *__pyx_v_envelope) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("make_fir_coeffs", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = ((PyObject *)__pyx_f_8pysndlib_3clm_make_fir_coeffs(__pyx_v_order, __pyx_v_envelope, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3157, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pysndlib.clm.make_fir_coeffs", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__391 = PyTuple_Pack(2, __pyx_n_s_order, __pyx_n_s_envelope); if (unlikely(!__pyx_tuple__391)) __PYX_ERR(0, 3157, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__391);
  __Pyx_GIVEREF(__pyx_tuple__391);
/* … */
  __pyx_t_41 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 3157, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  if (PyDict_SetItem(__pyx_t_41, __pyx_n_s_order, __pyx_n_s_int_2) < 0) __PYX_ERR(0, 3157, __pyx_L1_error)
  __pyx_t_40 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_347make_fir_coeffs, 0, __pyx_n_s_make_fir_coeffs, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__392)); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 3157, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_40, __pyx_t_41);
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_make_fir_coeffs, __pyx_t_40) < 0) __PYX_ERR(0, 3157, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
  __pyx_codeobj__392 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__391, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_make_fir_coeffs, 3157, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__392)) __PYX_ERR(0, 3157, __pyx_L1_error)
 3158:     """
 3159:     translates a frequency response envelope (actually, evenly spaced points \in a float-vector) into
 3160:     the corresponding FIR filter coefficients. The order of the filter determines how close you get to the
 3161:     envelope.
 3162:     
 3163:     :param order: order of the filter
 3164:     :param envelope: response envelope
 3165:     """
+3166:     cdef double [:] envelope_view = None
  __pyx_t_1 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(Py_None, PyBUF_WRITABLE); if (unlikely(!__pyx_t_1.memview)) __PYX_ERR(0, 3166, __pyx_L1_error)
  __pyx_v_envelope_view = __pyx_t_1;
  __pyx_t_1.memview = NULL;
  __pyx_t_1.data = NULL;
 3167: 
+3168:     if isinstance(envelope, list):
  __pyx_t_2 = PyList_Check(__pyx_v_envelope); 
  if (__pyx_t_2) {
/* … */
  }
+3169:         envelope = np.ndarray(envelope)
    __pyx_t_3 = __Pyx_PyObject_CallOneArg(((PyObject *)__pyx_ptype_5numpy_ndarray), __pyx_v_envelope); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3169, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF_SET(__pyx_v_envelope, __pyx_t_3);
    __pyx_t_3 = 0;
 3170: 
+3171:     check_ndim(envelope)
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_check_ndim); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3171, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = NULL;
  __pyx_t_6 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) {
    __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4);
    if (likely(__pyx_t_5)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
      __Pyx_INCREF(__pyx_t_5);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_4, function);
      __pyx_t_6 = 1;
    }
  }
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_v_envelope};
    __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_6, 1+__pyx_t_6);
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3171, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  }
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 3172: 
+3173:     envelope_view = envelope
  __pyx_t_1 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_envelope, PyBUF_WRITABLE); if (unlikely(!__pyx_t_1.memview)) __PYX_ERR(0, 3173, __pyx_L1_error)
  __PYX_XCLEAR_MEMVIEW(&__pyx_v_envelope_view, 1);
  __pyx_v_envelope_view = __pyx_t_1;
  __pyx_t_1.memview = NULL;
  __pyx_t_1.data = NULL;
 3174: 
+3175:     coeffs = np.zeros(order+1, dtype=np.double)
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3175, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_zeros); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3175, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = PyNumber_Add(__pyx_v_order, __pyx_int_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3175, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3175, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_GIVEREF(__pyx_t_3);
  PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_3);
  __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3175, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_np); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3175, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_double); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 3175, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_dtype, __pyx_t_8) < 0) __PYX_ERR(0, 3175, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_5, __pyx_t_3); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 3175, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_v_coeffs = __pyx_t_8;
  __pyx_t_8 = 0;
 3176: 
+3177:     cdef double [:] coeffs_view = coeffs
  __pyx_t_1 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_coeffs, PyBUF_WRITABLE); if (unlikely(!__pyx_t_1.memview)) __PYX_ERR(0, 3177, __pyx_L1_error)
  __pyx_v_coeffs_view = __pyx_t_1;
  __pyx_t_1.memview = NULL;
  __pyx_t_1.data = NULL;
 3178: 
+3179:     cclm.mus_make_fir_coeffs(order, &envelope_view[0], &coeffs_view[0])
  __pyx_t_6 = __Pyx_PyInt_As_int(__pyx_v_order); if (unlikely((__pyx_t_6 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 3179, __pyx_L1_error)
  __pyx_t_9 = 0;
  __pyx_t_10 = -1;
  if (__pyx_t_9 < 0) {
    __pyx_t_9 += __pyx_v_envelope_view.shape[0];
    if (unlikely(__pyx_t_9 < 0)) __pyx_t_10 = 0;
  } else if (unlikely(__pyx_t_9 >= __pyx_v_envelope_view.shape[0])) __pyx_t_10 = 0;
  if (unlikely(__pyx_t_10 != -1)) {
    __Pyx_RaiseBufferIndexError(__pyx_t_10);
    __PYX_ERR(0, 3179, __pyx_L1_error)
  }
  __pyx_t_11 = 0;
  __pyx_t_10 = -1;
  if (__pyx_t_11 < 0) {
    __pyx_t_11 += __pyx_v_coeffs_view.shape[0];
    if (unlikely(__pyx_t_11 < 0)) __pyx_t_10 = 0;
  } else if (unlikely(__pyx_t_11 >= __pyx_v_coeffs_view.shape[0])) __pyx_t_10 = 0;
  if (unlikely(__pyx_t_10 != -1)) {
    __Pyx_RaiseBufferIndexError(__pyx_t_10);
    __PYX_ERR(0, 3179, __pyx_L1_error)
  }
  (void)(mus_make_fir_coeffs(__pyx_t_6, (&(*((double *) ( /* dim=0 */ (__pyx_v_envelope_view.data + __pyx_t_9 * __pyx_v_envelope_view.strides[0]) )))), (&(*((double *) ( /* dim=0 */ (__pyx_v_coeffs_view.data + __pyx_t_11 * __pyx_v_coeffs_view.strides[0]) ))))));
+3180:     return coeffs
  __Pyx_XDECREF((PyObject *)__pyx_r);
  if (!(likely(((__pyx_v_coeffs) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_coeffs, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 3180, __pyx_L1_error)
  __Pyx_INCREF(__pyx_v_coeffs);
  __pyx_r = ((PyArrayObject *)__pyx_v_coeffs);
  goto __pyx_L0;
 3181: 
 3182: 
 3183: # ---------------- delay ---------------- #
+3184: cpdef mus_any make_delay(size: int,
static PyObject *__pyx_pw_8pysndlib_3clm_349make_delay(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_f_8pysndlib_3clm_make_delay(PyObject *__pyx_v_size, CYTHON_UNUSED int __pyx_skip_dispatch, struct __pyx_opt_args_8pysndlib_3clm_make_delay *__pyx_optional_args) {
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __PYX_XCLEAR_MEMVIEW(&__pyx_t_5, 1);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_AddTraceback("pysndlib.clm.make_delay", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __PYX_XCLEAR_MEMVIEW(&__pyx_v_initial_contents_view, 1);
  __Pyx_XDECREF((PyObject *)__pyx_v_gen);
  __Pyx_XDECREF(__pyx_v_initial_contents);
  __Pyx_XDECREF(__pyx_v_max_size);
  __Pyx_XDECREF(__pyx_v_interp_type);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_349make_delay(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_348make_delay, "\n    return a new delay line of size elements. if the delay length will be changing at run-time,\n    max-size sets its maximum length.\n    \n    :param size: delay length \\in samples\n    :param initial_contents: delay line's initial values\n    :param initial_element: delay line's initial element\n    :param max_size: maximum delay size \\in case the delay changes\n    :param type: interpolation type\n    :return: delay gen\n    :rtype: mus_any\n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_349make_delay = {"make_delay", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_349make_delay, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_348make_delay};
static PyObject *__pyx_pw_8pysndlib_3clm_349make_delay(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_size = 0;
  PyObject *__pyx_v_initial_contents = 0;
  PyObject *__pyx_v_initial_element = 0;
  PyObject *__pyx_v_max_size = 0;
  PyObject *__pyx_v_interp_type = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("make_delay (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_size,&__pyx_n_s_initial_contents,&__pyx_n_s_initial_element,&__pyx_n_s_max_size,&__pyx_n_s_interp_type,0};
    PyObject* values[5] = {0,0,0,0,0};
/* … */
  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_348make_delay(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_size, PyObject *__pyx_v_initial_contents, PyObject *__pyx_v_initial_element, PyObject *__pyx_v_max_size, PyObject *__pyx_v_interp_type) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("make_delay", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2.__pyx_n = 4;
  __pyx_t_2.initial_contents = __pyx_v_initial_contents;
  __pyx_t_2.initial_element = __pyx_v_initial_element;
  __pyx_t_2.max_size = __pyx_v_max_size;
  __pyx_t_2.interp_type = __pyx_v_interp_type;
  __pyx_t_1 = ((PyObject *)__pyx_f_8pysndlib_3clm_make_delay(__pyx_v_size, 0, &__pyx_t_2)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3184, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pysndlib.clm.make_delay", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__393 = PyTuple_Pack(5, __pyx_n_s_size, __pyx_n_s_initial_contents, __pyx_n_s_initial_element, __pyx_n_s_max_size, __pyx_n_s_interp_type); if (unlikely(!__pyx_tuple__393)) __PYX_ERR(0, 3184, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__393);
  __Pyx_GIVEREF(__pyx_tuple__393);
/* … */
  __pyx_t_41 = PyTuple_New(4); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 3184, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  PyTuple_SET_ITEM(__pyx_t_41, 0, Py_None);
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  PyTuple_SET_ITEM(__pyx_t_41, 1, Py_None);
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  PyTuple_SET_ITEM(__pyx_t_41, 2, Py_None);
  __Pyx_GIVEREF(__pyx_t_40);
  PyTuple_SET_ITEM(__pyx_t_41, 3, __pyx_t_40);
  __pyx_t_40 = 0;
  __pyx_t_40 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 3184, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  if (PyDict_SetItem(__pyx_t_40, __pyx_n_s_size, __pyx_n_s_int_2) < 0) __PYX_ERR(0, 3184, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_40, __pyx_n_s_initial_element, __pyx_kp_s_Optional_float) < 0) __PYX_ERR(0, 3184, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_40, __pyx_n_s_max_size, __pyx_kp_s_Optional_int) < 0) __PYX_ERR(0, 3184, __pyx_L1_error)
  __pyx_t_37 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_349make_delay, 0, __pyx_n_s_make_delay, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__394)); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 3184, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_37, __pyx_t_41);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_37, __pyx_t_40);
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_make_delay, __pyx_t_37) < 0) __PYX_ERR(0, 3184, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
  __pyx_codeobj__394 = (PyObject*)__Pyx_PyCode_New(5, 0, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__393, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_make_delay, 3184, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__394)) __PYX_ERR(0, 3184, __pyx_L1_error)
/* … */
struct __pyx_opt_args_8pysndlib_3clm_make_delay {
  int __pyx_n;
  PyObject *initial_contents;
  PyObject *initial_element;
  PyObject *max_size;
  PyObject *interp_type;
};
+3185:                 initial_contents=None,
  PyObject *__pyx_v_initial_contents = ((PyObject *)Py_None);
/* … */
    values[1] = ((PyObject *)Py_None);
+3186:                 initial_element: Optional[float]=None,
  PyObject *__pyx_v_initial_element = ((PyObject *)Py_None);
/* … */
    values[2] = ((PyObject *)Py_None);
+3187:                 max_size:Optional[int]=None,
  PyObject *__pyx_v_max_size = ((PyObject *)Py_None);
  PyObject *__pyx_v_interp_type = __pyx_k__33;
  __Pyx_memviewslice __pyx_v_initial_contents_view = { 0, 0, { 0 }, { 0 }, { 0 } };
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen = NULL;
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("make_delay", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_initial_contents = __pyx_optional_args->initial_contents;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_initial_element = __pyx_optional_args->initial_element;
        if (__pyx_optional_args->__pyx_n > 2) {
          __pyx_v_max_size = __pyx_optional_args->max_size;
          if (__pyx_optional_args->__pyx_n > 3) {
            __pyx_v_interp_type = __pyx_optional_args->interp_type;
          }
        }
      }
    }
  }
  __Pyx_INCREF(__pyx_v_initial_contents);
  __Pyx_INCREF(__pyx_v_max_size);
  __Pyx_INCREF(__pyx_v_interp_type);
/* … */
    values[3] = ((PyObject *)Py_None);
    values[4] = __pyx_k__33;
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  5: values[4] = __Pyx_Arg_FASTCALL(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_size)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 3184, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_initial_contents);
          if (value) { values[1] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 3184, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_initial_element);
          if (value) { values[2] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 3184, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_max_size);
          if (value) { values[3] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 3184, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_interp_type);
          if (value) { values[4] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 3184, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "make_delay") < 0)) __PYX_ERR(0, 3184, __pyx_L3_error)
      }
    } else {
      switch (__pyx_nargs) {
        case  5: values[4] = __Pyx_Arg_FASTCALL(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_size = ((PyObject*)values[0]);
    __pyx_v_initial_contents = values[1];
    __pyx_v_initial_element = values[2];
    __pyx_v_max_size = values[3];
    __pyx_v_interp_type = values[4];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("make_delay", 0, 1, 5, __pyx_nargs); __PYX_ERR(0, 3184, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.make_delay", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_size), (&PyInt_Type), 0, "size", 1))) __PYX_ERR(0, 3184, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pysndlib_3clm_348make_delay(__pyx_self, __pyx_v_size, __pyx_v_initial_contents, __pyx_v_initial_element, __pyx_v_max_size, __pyx_v_interp_type);
+3188:                 interp_type=Interp.NONE):
  __pyx_t_40 = __Pyx_Enum_Interp_to_py(__pyx_e_8pysndlib_3clm_NONE); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 3188, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  __pyx_k__33 = __pyx_t_40;
  __Pyx_GIVEREF(__pyx_t_40);
  __pyx_t_40 = 0;
/* … */
  __pyx_t_40 = __Pyx_Enum_Interp_to_py(__pyx_e_8pysndlib_3clm_NONE); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 3188, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
 3189:     """
 3190:     return a new delay line of size elements. if the delay length will be changing at run-time,
 3191:     max-size sets its maximum length.
 3192:     
 3193:     :param size: delay length \in samples
 3194:     :param initial_contents: delay line's initial values
 3195:     :param initial_element: delay line's initial element
 3196:     :param max_size: maximum delay size \in case the delay changes
 3197:     :param type: interpolation type
 3198:     :return: delay gen
 3199:     :rtype: mus_any
 3200:     """
 3201: 
+3202:     check_range('size', size, 0, None)
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_check_range); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3202, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  __pyx_t_4 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
      __pyx_t_4 = 1;
    }
  }
  {
    PyObject *__pyx_callargs[5] = {__pyx_t_3, __pyx_n_s_size, __pyx_v_size, __pyx_int_0, Py_None};
    __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 4+__pyx_t_4);
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3202, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 3203: 
+3204:     cdef double [:] initial_contents_view = None
  __pyx_t_5 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(Py_None, PyBUF_WRITABLE); if (unlikely(!__pyx_t_5.memview)) __PYX_ERR(0, 3204, __pyx_L1_error)
  __pyx_v_initial_contents_view = __pyx_t_5;
  __pyx_t_5.memview = NULL;
  __pyx_t_5.data = NULL;
 3205: 
+3206:     if not max_size:
  __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_v_max_size); if (unlikely((__pyx_t_6 < 0))) __PYX_ERR(0, 3206, __pyx_L1_error)
  __pyx_t_7 = (!__pyx_t_6);
  if (__pyx_t_7) {
/* … */
  }
+3207:         max_size = size
    __Pyx_INCREF(__pyx_v_size);
    __Pyx_DECREF_SET(__pyx_v_max_size, __pyx_v_size);
 3208: 
+3209:     if max_size != size and interp_type == Interp.NONE:
  __pyx_t_1 = PyObject_RichCompare(__pyx_v_max_size, __pyx_v_size, Py_NE); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3209, __pyx_L1_error)
  __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_6 < 0))) __PYX_ERR(0, 3209, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_6) {
  } else {
    __pyx_t_7 = __pyx_t_6;
    goto __pyx_L5_bool_binop_done;
  }
  __pyx_t_1 = __Pyx_Enum_Interp_to_py(__pyx_e_8pysndlib_3clm_NONE); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3209, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = PyObject_RichCompare(__pyx_v_interp_type, __pyx_t_1, Py_EQ); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3209, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_6 < 0))) __PYX_ERR(0, 3209, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_7 = __pyx_t_6;
  __pyx_L5_bool_binop_done:;
  if (__pyx_t_7) {
/* … */
  }
+3210:         interp_type = Interp.LAGRANGE #think this is correct from clm2xen.c
    __pyx_t_2 = __Pyx_Enum_Interp_to_py(__pyx_e_8pysndlib_3clm_LAGRANGE); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3210, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF_SET(__pyx_v_interp_type, __pyx_t_2);
    __pyx_t_2 = 0;
 3211: 
+3212:     if initial_contents is not None:
  __pyx_t_7 = (__pyx_v_initial_contents != Py_None);
  if (__pyx_t_7) {
/* … */
    goto __pyx_L7;
  }
+3213:         if isinstance(initial_contents, list):
    __pyx_t_7 = PyList_Check(__pyx_v_initial_contents); 
    if (__pyx_t_7) {
/* … */
    }
+3214:             initial_contents = np.array(initial_contents)
      __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3214, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_array); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3214, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_1 = NULL;
      __pyx_t_4 = 0;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
        __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_3);
        if (likely(__pyx_t_1)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
          __Pyx_INCREF(__pyx_t_1);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_3, function);
          __pyx_t_4 = 1;
        }
      }
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_1, __pyx_v_initial_contents};
        __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4);
        __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
        if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3214, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      }
      __Pyx_DECREF_SET(__pyx_v_initial_contents, __pyx_t_2);
      __pyx_t_2 = 0;
+3215:         check_ndim(initial_contents)
    __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_check_ndim); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3215, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_1 = NULL;
    __pyx_t_4 = 0;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
      __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_3);
      if (likely(__pyx_t_1)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
        __Pyx_INCREF(__pyx_t_1);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_3, function);
        __pyx_t_4 = 1;
      }
    }
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_1, __pyx_v_initial_contents};
      __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4);
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3215, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    }
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+3216:         initial_contents_view = initial_contents
    __pyx_t_5 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_initial_contents, PyBUF_WRITABLE); if (unlikely(!__pyx_t_5.memview)) __PYX_ERR(0, 3216, __pyx_L1_error)
    __PYX_XCLEAR_MEMVIEW(&__pyx_v_initial_contents_view, 1);
    __pyx_v_initial_contents_view = __pyx_t_5;
    __pyx_t_5.memview = NULL;
    __pyx_t_5.data = NULL;
 3217: 
+3218:     elif initial_element:
  __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_v_initial_element); if (unlikely((__pyx_t_7 < 0))) __PYX_ERR(0, 3218, __pyx_L1_error)
  if (__pyx_t_7) {
/* … */
  }
  __pyx_L7:;
+3219:         initial_contents = np.zeros(max_size, dtype=np.double)
    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3219, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_zeros); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3219, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3219, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_INCREF(__pyx_v_max_size);
    __Pyx_GIVEREF(__pyx_v_max_size);
    PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_max_size);
    __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3219, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 3219, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_double); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 3219, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_t_9) < 0) __PYX_ERR(0, 3219, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    __pyx_t_9 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_2, __pyx_t_1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 3219, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_DECREF_SET(__pyx_v_initial_contents, __pyx_t_9);
    __pyx_t_9 = 0;
+3220:         check_ndim(initial_contents)
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_check_ndim); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3220, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_2 = NULL;
    __pyx_t_4 = 0;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) {
      __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_1);
      if (likely(__pyx_t_2)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
        __Pyx_INCREF(__pyx_t_2);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_1, function);
        __pyx_t_4 = 1;
      }
    }
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_v_initial_contents};
      __pyx_t_9 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4);
      __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
      if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 3220, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    }
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+3221:         initial_contents.fill(initial_element)
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_initial_contents, __pyx_n_s_fill); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3221, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_2 = NULL;
    __pyx_t_4 = 0;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) {
      __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_1);
      if (likely(__pyx_t_2)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
        __Pyx_INCREF(__pyx_t_2);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_1, function);
        __pyx_t_4 = 1;
      }
    }
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_v_initial_element};
      __pyx_t_9 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4);
      __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
      if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 3221, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    }
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+3222:         initial_contents_view = initial_contents
    __pyx_t_5 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_initial_contents, PyBUF_WRITABLE); if (unlikely(!__pyx_t_5.memview)) __PYX_ERR(0, 3222, __pyx_L1_error)
    __PYX_XCLEAR_MEMVIEW(&__pyx_v_initial_contents_view, 1);
    __pyx_v_initial_contents_view = __pyx_t_5;
    __pyx_t_5.memview = NULL;
    __pyx_t_5.data = NULL;
 3223: 
+3224:     if initial_contents_view is not None:
  __pyx_t_7 = (((PyObject *) __pyx_v_initial_contents_view.memview) != Py_None);
  if (__pyx_t_7) {
/* … */
    goto __pyx_L9;
  }
+3225:         gen = mus_any.from_ptr(cclm.mus_make_delay(size, &initial_contents_view[0], max_size, interp_type))
    __pyx_t_4 = __Pyx_PyInt_As_int(__pyx_v_size); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 3225, __pyx_L1_error)
    __pyx_t_10 = 0;
    __pyx_t_11 = -1;
    if (__pyx_t_10 < 0) {
      __pyx_t_10 += __pyx_v_initial_contents_view.shape[0];
      if (unlikely(__pyx_t_10 < 0)) __pyx_t_11 = 0;
    } else if (unlikely(__pyx_t_10 >= __pyx_v_initial_contents_view.shape[0])) __pyx_t_11 = 0;
    if (unlikely(__pyx_t_11 != -1)) {
      __Pyx_RaiseBufferIndexError(__pyx_t_11);
      __PYX_ERR(0, 3225, __pyx_L1_error)
    }
    __pyx_t_11 = __Pyx_PyInt_As_int(__pyx_v_max_size); if (unlikely((__pyx_t_11 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 3225, __pyx_L1_error)
    __pyx_t_12 = ((mus_interp_t)__Pyx_PyInt_As_mus_interp_t(__pyx_v_interp_type)); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 3225, __pyx_L1_error)
    __pyx_t_9 = ((PyObject *)__pyx_vtabptr_8pysndlib_3clm_mus_any->from_ptr(mus_make_delay(__pyx_t_4, (&(*((double *) ( /* dim=0 */ (__pyx_v_initial_contents_view.data + __pyx_t_10 * __pyx_v_initial_contents_view.strides[0]) )))), __pyx_t_11, __pyx_t_12), NULL)); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 3225, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __pyx_v_gen = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)__pyx_t_9);
    __pyx_t_9 = 0;
 3226:     else:
+3227:         gen = mus_any.from_ptr(cclm.mus_make_delay(size, NULL, max_size, interp_type))
  /*else*/ {
    __pyx_t_11 = __Pyx_PyInt_As_int(__pyx_v_size); if (unlikely((__pyx_t_11 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 3227, __pyx_L1_error)
    __pyx_t_4 = __Pyx_PyInt_As_int(__pyx_v_max_size); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 3227, __pyx_L1_error)
    __pyx_t_12 = ((mus_interp_t)__Pyx_PyInt_As_mus_interp_t(__pyx_v_interp_type)); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 3227, __pyx_L1_error)
    __pyx_t_9 = ((PyObject *)__pyx_vtabptr_8pysndlib_3clm_mus_any->from_ptr(mus_make_delay(__pyx_t_11, NULL, __pyx_t_4, __pyx_t_12), NULL)); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 3227, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __pyx_v_gen = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)__pyx_t_9);
    __pyx_t_9 = 0;
  }
  __pyx_L9:;
 3228: 
+3229:     gen.cache_append(initial_contents)
  __pyx_t_9 = ((struct __pyx_vtabstruct_8pysndlib_3clm_mus_any *)__pyx_v_gen->__pyx_vtab)->cache_append(__pyx_v_gen, __pyx_v_initial_contents, 0); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 3229, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+3230:     return gen
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __Pyx_INCREF((PyObject *)__pyx_v_gen);
  __pyx_r = __pyx_v_gen;
  goto __pyx_L0;
 3231: 
+3232: cpdef cython.double delay(gen: mus_any, insig: float, pm: Optional[float]=None):
static PyObject *__pyx_pw_8pysndlib_3clm_351delay(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static double __pyx_f_8pysndlib_3clm_delay(struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen, double __pyx_v_insig, CYTHON_UNUSED int __pyx_skip_dispatch, struct __pyx_opt_args_8pysndlib_3clm_delay *__pyx_optional_args) {
  PyObject *__pyx_v_pm = ((PyObject *)Py_None);
  double __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("delay", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_pm = __pyx_optional_args->pm;
    }
  }
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("pysndlib.clm.delay", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_351delay(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_350delay, "\n    delay val according to the delay line's length and pm ('phase-modulation').\n    if pm is greater than 0.0, the max-size argument used to create gen should have accommodated \n    its maximum value. \n    \n    :param gen: delay gen\n    :param insig: input value\n    :param pm: change \\in delay length size. can be + or -\n    :rtype: float\n\n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_351delay = {"delay", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_351delay, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_350delay};
static PyObject *__pyx_pw_8pysndlib_3clm_351delay(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen = 0;
  double __pyx_v_insig;
  PyObject *__pyx_v_pm = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("delay (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_gen,&__pyx_n_s_insig,&__pyx_n_s_pm,0};
    PyObject* values[3] = {0,0,0};
    values[2] = ((PyObject *)Py_None);
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_gen)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 3232, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_insig)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 3232, __pyx_L3_error)
        else {
          __Pyx_RaiseArgtupleInvalid("delay", 0, 2, 3, 1); __PYX_ERR(0, 3232, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_pm);
          if (value) { values[2] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 3232, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "delay") < 0)) __PYX_ERR(0, 3232, __pyx_L3_error)
      }
    } else {
      switch (__pyx_nargs) {
        case  3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_gen = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)values[0]);
    __pyx_v_insig = __pyx_PyFloat_AsDouble(values[1]); if (unlikely((__pyx_v_insig == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 3232, __pyx_L3_error)
    __pyx_v_pm = values[2];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("delay", 0, 2, 3, __pyx_nargs); __PYX_ERR(0, 3232, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.delay", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_gen), __pyx_ptype_8pysndlib_3clm_mus_any, 0, "gen", 0))) __PYX_ERR(0, 3232, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pysndlib_3clm_350delay(__pyx_self, __pyx_v_gen, __pyx_v_insig, __pyx_v_pm);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_350delay(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen, double __pyx_v_insig, PyObject *__pyx_v_pm) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("delay", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2.__pyx_n = 1;
  __pyx_t_2.pm = __pyx_v_pm;
  __pyx_t_1 = __pyx_f_8pysndlib_3clm_delay(__pyx_v_gen, __pyx_v_insig, 0, &__pyx_t_2); if (unlikely(__pyx_t_1 == ((double)-1) && PyErr_Occurred())) __PYX_ERR(0, 3232, __pyx_L1_error)
  __pyx_t_3 = PyFloat_FromDouble(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3232, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_r = __pyx_t_3;
  __pyx_t_3 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("pysndlib.clm.delay", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__395 = PyTuple_Pack(3, __pyx_n_s_gen, __pyx_n_s_insig, __pyx_n_s_pm); if (unlikely(!__pyx_tuple__395)) __PYX_ERR(0, 3232, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__395);
  __Pyx_GIVEREF(__pyx_tuple__395);
/* … */
  __pyx_t_37 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 3232, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  if (PyDict_SetItem(__pyx_t_37, __pyx_n_s_gen, __pyx_n_s_mus_any) < 0) __PYX_ERR(0, 3232, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_37, __pyx_n_s_insig, __pyx_n_s_float) < 0) __PYX_ERR(0, 3232, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_37, __pyx_n_s_pm, __pyx_kp_s_Optional_float) < 0) __PYX_ERR(0, 3232, __pyx_L1_error)
  __pyx_t_40 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_351delay, 0, __pyx_n_s_delay, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__396)); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 3232, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_40, __pyx_tuple__258);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_40, __pyx_t_37);
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_delay, __pyx_t_40) < 0) __PYX_ERR(0, 3232, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
  __pyx_codeobj__396 = (PyObject*)__Pyx_PyCode_New(3, 0, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__395, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_delay, 3232, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__396)) __PYX_ERR(0, 3232, __pyx_L1_error)
/* … */
struct __pyx_opt_args_8pysndlib_3clm_delay {
  int __pyx_n;
  PyObject *pm;
};
 3233:     """
 3234:     delay val according to the delay line's length and pm ('phase-modulation').
 3235:     if pm is greater than 0.0, the max-size argument used to create gen should have accommodated 
 3236:     its maximum value. 
 3237:     
 3238:     :param gen: delay gen
 3239:     :param insig: input value
 3240:     :param pm: change \in delay length size. can be + or -
 3241:     :rtype: float
 3242: 
 3243:     """
+3244:     if pm:
  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_pm); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 3244, __pyx_L1_error)
  if (__pyx_t_1) {
/* … */
  }
+3245:         return cclm.mus_delay(gen._ptr, insig, pm)
    __pyx_t_2 = __pyx_PyFloat_AsDouble(__pyx_v_pm); if (unlikely((__pyx_t_2 == ((mus_float_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 3245, __pyx_L1_error)
    __pyx_r = mus_delay(__pyx_v_gen->_ptr, __pyx_v_insig, __pyx_t_2);
    goto __pyx_L0;
 3246:     else:
+3247:         return cclm.mus_delay_unmodulated(gen._ptr, insig)
  /*else*/ {
    __pyx_r = mus_delay_unmodulated(__pyx_v_gen->_ptr, __pyx_v_insig);
    goto __pyx_L0;
  }
 3248: 
+3249: cpdef bint is_delay(gen: mus_any):
static PyObject *__pyx_pw_8pysndlib_3clm_353is_delay(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static int __pyx_f_8pysndlib_3clm_is_delay(struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen, CYTHON_UNUSED int __pyx_skip_dispatch) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_delay", 0);
/* … */
  /* function exit code */
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_353is_delay(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_352is_delay, "\n    returns True if gen is a delay.\n    \n    :param gen: gen\n    :rtype: bool\n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_353is_delay = {"is_delay", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_353is_delay, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_352is_delay};
static PyObject *__pyx_pw_8pysndlib_3clm_353is_delay(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_delay (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_gen,0};
    PyObject* values[1] = {0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_gen)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 3249, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "is_delay") < 0)) __PYX_ERR(0, 3249, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
    }
    __pyx_v_gen = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)values[0]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("is_delay", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 3249, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.is_delay", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_gen), __pyx_ptype_8pysndlib_3clm_mus_any, 0, "gen", 0))) __PYX_ERR(0, 3249, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pysndlib_3clm_352is_delay(__pyx_self, __pyx_v_gen);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_352is_delay(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_delay", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_8pysndlib_3clm_is_delay(__pyx_v_gen, 0); if (unlikely(__pyx_t_1 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 3249, __pyx_L1_error)
  __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3249, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pysndlib.clm.is_delay", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_40 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 3249, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  if (PyDict_SetItem(__pyx_t_40, __pyx_n_s_gen, __pyx_n_s_mus_any) < 0) __PYX_ERR(0, 3249, __pyx_L1_error)
  __pyx_t_37 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_353is_delay, 0, __pyx_n_s_is_delay, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__397)); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 3249, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_37, __pyx_t_40);
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_is_delay, __pyx_t_37) < 0) __PYX_ERR(0, 3249, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
/* … */
  __pyx_codeobj__397 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__46, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_is_delay, 3249, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__397)) __PYX_ERR(0, 3249, __pyx_L1_error)
 3250:     """
 3251:     returns True if gen is a delay.
 3252:     
 3253:     :param gen: gen
 3254:     :rtype: bool
 3255:     """
+3256:     return cclm.mus_is_delay(gen._ptr)
  __pyx_r = mus_is_delay(__pyx_v_gen->_ptr);
  goto __pyx_L0;
 3257: 
+3258: cpdef cython.double tap(gen: mus_any, offset: Optional[float]=None):
static PyObject *__pyx_pw_8pysndlib_3clm_355tap(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static double __pyx_f_8pysndlib_3clm_tap(struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen, CYTHON_UNUSED int __pyx_skip_dispatch, struct __pyx_opt_args_8pysndlib_3clm_tap *__pyx_optional_args) {
  PyObject *__pyx_v_offset = ((PyObject *)Py_None);
  double __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("tap", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_offset = __pyx_optional_args->offset;
    }
  }
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("pysndlib.clm.tap", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_355tap(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_354tap, "\n    tap the delay mus_any offset by pm\n    \n    :param gen: delay gen\n    :param offset: offset in samples from output point\n    :rtype: float\n    \n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_355tap = {"tap", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_355tap, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_354tap};
static PyObject *__pyx_pw_8pysndlib_3clm_355tap(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen = 0;
  PyObject *__pyx_v_offset = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("tap (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_gen,&__pyx_n_s_offset,0};
    PyObject* values[2] = {0,0};
    values[1] = ((PyObject *)Py_None);
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_gen)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 3258, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_offset);
          if (value) { values[1] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 3258, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "tap") < 0)) __PYX_ERR(0, 3258, __pyx_L3_error)
      }
    } else {
      switch (__pyx_nargs) {
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_gen = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)values[0]);
    __pyx_v_offset = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("tap", 0, 1, 2, __pyx_nargs); __PYX_ERR(0, 3258, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.tap", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_gen), __pyx_ptype_8pysndlib_3clm_mus_any, 0, "gen", 0))) __PYX_ERR(0, 3258, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pysndlib_3clm_354tap(__pyx_self, __pyx_v_gen, __pyx_v_offset);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_354tap(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen, PyObject *__pyx_v_offset) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("tap", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2.__pyx_n = 1;
  __pyx_t_2.offset = __pyx_v_offset;
  __pyx_t_1 = __pyx_f_8pysndlib_3clm_tap(__pyx_v_gen, 0, &__pyx_t_2); if (unlikely(__pyx_t_1 == ((double)-1) && PyErr_Occurred())) __PYX_ERR(0, 3258, __pyx_L1_error)
  __pyx_t_3 = PyFloat_FromDouble(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3258, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_r = __pyx_t_3;
  __pyx_t_3 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("pysndlib.clm.tap", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__398 = PyTuple_Pack(2, __pyx_n_s_gen, __pyx_n_s_offset); if (unlikely(!__pyx_tuple__398)) __PYX_ERR(0, 3258, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__398);
  __Pyx_GIVEREF(__pyx_tuple__398);
/* … */
  __pyx_t_37 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 3258, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  if (PyDict_SetItem(__pyx_t_37, __pyx_n_s_gen, __pyx_n_s_mus_any) < 0) __PYX_ERR(0, 3258, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_37, __pyx_n_s_offset, __pyx_kp_s_Optional_float) < 0) __PYX_ERR(0, 3258, __pyx_L1_error)
  __pyx_t_40 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_355tap, 0, __pyx_n_s_tap, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__399)); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 3258, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_40, __pyx_tuple__258);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_40, __pyx_t_37);
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_tap, __pyx_t_40) < 0) __PYX_ERR(0, 3258, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
  __pyx_codeobj__399 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__398, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_tap, 3258, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__399)) __PYX_ERR(0, 3258, __pyx_L1_error)
/* … */
struct __pyx_opt_args_8pysndlib_3clm_tap {
  int __pyx_n;
  PyObject *offset;
};
 3259:     """
 3260:     tap the delay mus_any offset by pm
 3261:     
 3262:     :param gen: delay gen
 3263:     :param offset: offset in samples from output point
 3264:     :rtype: float
 3265:     
 3266:     """
+3267:     if offset:
  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_offset); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 3267, __pyx_L1_error)
  if (__pyx_t_1) {
/* … */
  }
+3268:         return cclm.mus_tap(gen._ptr, offset)
    __pyx_t_2 = __pyx_PyFloat_AsDouble(__pyx_v_offset); if (unlikely((__pyx_t_2 == ((mus_float_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 3268, __pyx_L1_error)
    __pyx_r = mus_tap(__pyx_v_gen->_ptr, __pyx_t_2);
    goto __pyx_L0;
 3269:     else:
+3270:         return cclm.mus_tap_unmodulated(gen._ptr)
  /*else*/ {
    __pyx_r = mus_tap_unmodulated(__pyx_v_gen->_ptr);
    goto __pyx_L0;
  }
 3271: 
+3272: cpdef bint is_tap(gen: mus_any):
static PyObject *__pyx_pw_8pysndlib_3clm_357is_tap(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static int __pyx_f_8pysndlib_3clm_is_tap(struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen, CYTHON_UNUSED int __pyx_skip_dispatch) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_tap", 0);
/* … */
  /* function exit code */
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_357is_tap(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_356is_tap, "\n    returns True if gen is a tap.\n    \n    :param gen: gen\n    :rtype: bool\n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_357is_tap = {"is_tap", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_357is_tap, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_356is_tap};
static PyObject *__pyx_pw_8pysndlib_3clm_357is_tap(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_tap (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_gen,0};
    PyObject* values[1] = {0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_gen)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 3272, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "is_tap") < 0)) __PYX_ERR(0, 3272, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
    }
    __pyx_v_gen = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)values[0]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("is_tap", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 3272, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.is_tap", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_gen), __pyx_ptype_8pysndlib_3clm_mus_any, 0, "gen", 0))) __PYX_ERR(0, 3272, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pysndlib_3clm_356is_tap(__pyx_self, __pyx_v_gen);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_356is_tap(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_tap", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_8pysndlib_3clm_is_tap(__pyx_v_gen, 0); if (unlikely(__pyx_t_1 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 3272, __pyx_L1_error)
  __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3272, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pysndlib.clm.is_tap", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_40 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 3272, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  if (PyDict_SetItem(__pyx_t_40, __pyx_n_s_gen, __pyx_n_s_mus_any) < 0) __PYX_ERR(0, 3272, __pyx_L1_error)
  __pyx_t_37 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_357is_tap, 0, __pyx_n_s_is_tap, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__400)); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 3272, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_37, __pyx_t_40);
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_is_tap, __pyx_t_37) < 0) __PYX_ERR(0, 3272, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
/* … */
  __pyx_codeobj__400 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__46, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_is_tap, 3272, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__400)) __PYX_ERR(0, 3272, __pyx_L1_error)
 3273:     """
 3274:     returns True if gen is a tap.
 3275:     
 3276:     :param gen: gen
 3277:     :rtype: bool
 3278:     """
+3279:     return cclm.mus_is_tap(gen._ptr)
  __pyx_r = mus_is_tap(__pyx_v_gen->_ptr);
  goto __pyx_L0;
 3280: 
+3281: cpdef cython.double delay_tick(gen: mus_any, insig: float ):
static PyObject *__pyx_pw_8pysndlib_3clm_359delay_tick(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static double __pyx_f_8pysndlib_3clm_delay_tick(struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen, double __pyx_v_insig, CYTHON_UNUSED int __pyx_skip_dispatch) {
  double __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("delay_tick", 0);
/* … */
  /* function exit code */
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_359delay_tick(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_358delay_tick, "\n    delay val according to the delay line's length. this merely 'ticks' the delay line forward.\n    the argument 'insi' is returned.\n    \n    :param gen: delay gen\n    :rtype: float\n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_359delay_tick = {"delay_tick", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_359delay_tick, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_358delay_tick};
static PyObject *__pyx_pw_8pysndlib_3clm_359delay_tick(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen = 0;
  double __pyx_v_insig;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("delay_tick (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_gen,&__pyx_n_s_insig,0};
    PyObject* values[2] = {0,0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_gen)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 3281, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_insig)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 3281, __pyx_L3_error)
        else {
          __Pyx_RaiseArgtupleInvalid("delay_tick", 1, 2, 2, 1); __PYX_ERR(0, 3281, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "delay_tick") < 0)) __PYX_ERR(0, 3281, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 2)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
      values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
    }
    __pyx_v_gen = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)values[0]);
    __pyx_v_insig = __pyx_PyFloat_AsDouble(values[1]); if (unlikely((__pyx_v_insig == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 3281, __pyx_L3_error)
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("delay_tick", 1, 2, 2, __pyx_nargs); __PYX_ERR(0, 3281, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.delay_tick", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_gen), __pyx_ptype_8pysndlib_3clm_mus_any, 0, "gen", 0))) __PYX_ERR(0, 3281, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pysndlib_3clm_358delay_tick(__pyx_self, __pyx_v_gen, __pyx_v_insig);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_358delay_tick(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen, double __pyx_v_insig) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("delay_tick", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_8pysndlib_3clm_delay_tick(__pyx_v_gen, __pyx_v_insig, 0); if (unlikely(__pyx_t_1 == ((double)-1) && PyErr_Occurred())) __PYX_ERR(0, 3281, __pyx_L1_error)
  __pyx_t_2 = PyFloat_FromDouble(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3281, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pysndlib.clm.delay_tick", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_37 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 3281, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  if (PyDict_SetItem(__pyx_t_37, __pyx_n_s_gen, __pyx_n_s_mus_any) < 0) __PYX_ERR(0, 3281, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_37, __pyx_n_s_insig, __pyx_n_s_float) < 0) __PYX_ERR(0, 3281, __pyx_L1_error)
  __pyx_t_40 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_359delay_tick, 0, __pyx_n_s_delay_tick, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__401)); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 3281, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_40, __pyx_t_37);
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_delay_tick, __pyx_t_40) < 0) __PYX_ERR(0, 3281, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
/* … */
  __pyx_codeobj__401 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__350, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_delay_tick, 3281, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__401)) __PYX_ERR(0, 3281, __pyx_L1_error)
 3282:     """
 3283:     delay val according to the delay line's length. this merely 'ticks' the delay line forward.
 3284:     the argument 'insi' is returned.
 3285:     
 3286:     :param gen: delay gen
 3287:     :rtype: float
 3288:     """
+3289:     return cclm.mus_delay_tick(gen._ptr, insig)
  __pyx_r = mus_delay_tick(__pyx_v_gen->_ptr, __pyx_v_insig);
  goto __pyx_L0;
 3290: 
 3291: 
 3292: # ---------------- comb ---------------- #
+3293: cpdef mus_any make_comb(feedback: Optional[float]=1.0,
static PyObject *__pyx_pw_8pysndlib_3clm_361make_comb(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_f_8pysndlib_3clm_make_comb(CYTHON_UNUSED int __pyx_skip_dispatch, struct __pyx_opt_args_8pysndlib_3clm_make_comb *__pyx_optional_args) {
  PyObject *__pyx_v_feedback = ((PyObject *)__pyx_float_1_0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __PYX_XCLEAR_MEMVIEW(&__pyx_t_5, 1);
  __Pyx_AddTraceback("pysndlib.clm.make_comb", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __PYX_XCLEAR_MEMVIEW(&__pyx_v_initial_contents_view, 1);
  __Pyx_XDECREF((PyObject *)__pyx_v_gen);
  __Pyx_XDECREF(__pyx_v_initial_contents);
  __Pyx_XDECREF(__pyx_v_max_size);
  __Pyx_XDECREF(__pyx_v_interp_type);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_361make_comb(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_360make_comb, "\n    return a new comb filter (a delay line with a scaler on the feedback) of size elements. if the comb\n    length will be changing at run-time, max-size sets its maximum length.       \n    \n    :param feedback: scaler on feedback\n    :param size: delay length \\in samples\n    :param initial_contents: delay line's initial values\n    :param initial_element: delay line's initial element\n    :param max_size: maximum delay size \\in case the delay changes\n    :param type: interpolation type\n    :return: comb gen\n    :rtype: mus_any\n        \n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_361make_comb = {"make_comb", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_361make_comb, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_360make_comb};
static PyObject *__pyx_pw_8pysndlib_3clm_361make_comb(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_feedback = 0;
  PyObject *__pyx_v_size = 0;
  PyObject *__pyx_v_initial_contents = 0;
  PyObject *__pyx_v_initial_element = 0;
  PyObject *__pyx_v_max_size = 0;
  PyObject *__pyx_v_interp_type = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("make_comb (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_feedback,&__pyx_n_s_size,&__pyx_n_s_initial_contents,&__pyx_n_s_initial_element,&__pyx_n_s_max_size,&__pyx_n_s_interp_type,0};
    PyObject* values[6] = {0,0,0,0,0,0};
    values[0] = ((PyObject *)__pyx_float_1_0);
/* … */
  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_360make_comb(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_feedback, PyObject *__pyx_v_size, PyObject *__pyx_v_initial_contents, PyObject *__pyx_v_initial_element, PyObject *__pyx_v_max_size, PyObject *__pyx_v_interp_type) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("make_comb", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2.__pyx_n = 6;
  __pyx_t_2.feedback = __pyx_v_feedback;
  __pyx_t_2.size = __pyx_v_size;
  __pyx_t_2.initial_contents = __pyx_v_initial_contents;
  __pyx_t_2.initial_element = __pyx_v_initial_element;
  __pyx_t_2.max_size = __pyx_v_max_size;
  __pyx_t_2.interp_type = __pyx_v_interp_type;
  __pyx_t_1 = ((PyObject *)__pyx_f_8pysndlib_3clm_make_comb(0, &__pyx_t_2)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3293, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pysndlib.clm.make_comb", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__402 = PyTuple_Pack(6, __pyx_n_s_feedback, __pyx_n_s_size, __pyx_n_s_initial_contents, __pyx_n_s_initial_element, __pyx_n_s_max_size, __pyx_n_s_interp_type); if (unlikely(!__pyx_tuple__402)) __PYX_ERR(0, 3293, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__402);
  __Pyx_GIVEREF(__pyx_tuple__402);
/* … */
  __pyx_t_37 = PyTuple_New(6); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 3293, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  __Pyx_INCREF(__pyx_float_1_0);
  __Pyx_GIVEREF(__pyx_float_1_0);
  PyTuple_SET_ITEM(__pyx_t_37, 0, __pyx_float_1_0);
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  PyTuple_SET_ITEM(__pyx_t_37, 1, Py_None);
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  PyTuple_SET_ITEM(__pyx_t_37, 2, Py_None);
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  PyTuple_SET_ITEM(__pyx_t_37, 3, Py_None);
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  PyTuple_SET_ITEM(__pyx_t_37, 4, Py_None);
  __Pyx_GIVEREF(__pyx_t_40);
  PyTuple_SET_ITEM(__pyx_t_37, 5, __pyx_t_40);
  __pyx_t_40 = 0;
  __pyx_t_40 = __Pyx_PyDict_NewPresized(4); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 3293, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  if (PyDict_SetItem(__pyx_t_40, __pyx_n_s_feedback, __pyx_kp_s_Optional_float) < 0) __PYX_ERR(0, 3293, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_40, __pyx_n_s_size, __pyx_kp_s_Optional_int) < 0) __PYX_ERR(0, 3293, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_40, __pyx_n_s_initial_element, __pyx_kp_s_Optional_float) < 0) __PYX_ERR(0, 3293, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_40, __pyx_n_s_max_size, __pyx_kp_s_Optional_int) < 0) __PYX_ERR(0, 3293, __pyx_L1_error)
  __pyx_t_41 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_361make_comb, 0, __pyx_n_s_make_comb, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__403)); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 3293, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_41, __pyx_t_37);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_41, __pyx_t_40);
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_make_comb, __pyx_t_41) < 0) __PYX_ERR(0, 3293, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
  __pyx_codeobj__403 = (PyObject*)__Pyx_PyCode_New(6, 0, 0, 6, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__402, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_make_comb, 3293, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__403)) __PYX_ERR(0, 3293, __pyx_L1_error)
/* … */
struct __pyx_opt_args_8pysndlib_3clm_make_comb {
  int __pyx_n;
  PyObject *feedback;
  PyObject *size;
  PyObject *initial_contents;
  PyObject *initial_element;
  PyObject *max_size;
  PyObject *interp_type;
};
+3294:                 size: Optional[int]=None,
  PyObject *__pyx_v_size = ((PyObject *)Py_None);
/* … */
    values[1] = ((PyObject *)Py_None);
+3295:                 initial_contents=None,
  PyObject *__pyx_v_initial_contents = ((PyObject *)Py_None);
/* … */
    values[2] = ((PyObject *)Py_None);
+3296:                 initial_element: Optional[float]=None,
  PyObject *__pyx_v_initial_element = ((PyObject *)Py_None);
/* … */
    values[3] = ((PyObject *)Py_None);
+3297:                 max_size:Optional[int]=None,
  PyObject *__pyx_v_max_size = ((PyObject *)Py_None);
  PyObject *__pyx_v_interp_type = __pyx_k__34;
  __Pyx_memviewslice __pyx_v_initial_contents_view = { 0, 0, { 0 }, { 0 }, { 0 } };
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen = NULL;
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("make_comb", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_feedback = __pyx_optional_args->feedback;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_size = __pyx_optional_args->size;
        if (__pyx_optional_args->__pyx_n > 2) {
          __pyx_v_initial_contents = __pyx_optional_args->initial_contents;
          if (__pyx_optional_args->__pyx_n > 3) {
            __pyx_v_initial_element = __pyx_optional_args->initial_element;
            if (__pyx_optional_args->__pyx_n > 4) {
              __pyx_v_max_size = __pyx_optional_args->max_size;
              if (__pyx_optional_args->__pyx_n > 5) {
                __pyx_v_interp_type = __pyx_optional_args->interp_type;
              }
            }
          }
        }
      }
    }
  }
  __Pyx_INCREF(__pyx_v_initial_contents);
  __Pyx_INCREF(__pyx_v_max_size);
  __Pyx_INCREF(__pyx_v_interp_type);
/* … */
    values[4] = ((PyObject *)Py_None);
    values[5] = __pyx_k__34;
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  6: values[5] = __Pyx_Arg_FASTCALL(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = __Pyx_Arg_FASTCALL(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_feedback);
          if (value) { values[0] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 3293, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_size);
          if (value) { values[1] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 3293, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_initial_contents);
          if (value) { values[2] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 3293, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_initial_element);
          if (value) { values[3] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 3293, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_max_size);
          if (value) { values[4] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 3293, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  5:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_interp_type);
          if (value) { values[5] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 3293, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "make_comb") < 0)) __PYX_ERR(0, 3293, __pyx_L3_error)
      }
    } else {
      switch (__pyx_nargs) {
        case  6: values[5] = __Pyx_Arg_FASTCALL(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = __Pyx_Arg_FASTCALL(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_feedback = values[0];
    __pyx_v_size = values[1];
    __pyx_v_initial_contents = values[2];
    __pyx_v_initial_element = values[3];
    __pyx_v_max_size = values[4];
    __pyx_v_interp_type = values[5];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("make_comb", 0, 0, 6, __pyx_nargs); __PYX_ERR(0, 3293, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.make_comb", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pysndlib_3clm_360make_comb(__pyx_self, __pyx_v_feedback, __pyx_v_size, __pyx_v_initial_contents, __pyx_v_initial_element, __pyx_v_max_size, __pyx_v_interp_type);
+3298:                 interp_type=Interp.NONE):
  __pyx_t_40 = __Pyx_Enum_Interp_to_py(__pyx_e_8pysndlib_3clm_NONE); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 3298, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  __pyx_k__34 = __pyx_t_40;
  __Pyx_GIVEREF(__pyx_t_40);
  __pyx_t_40 = 0;
/* … */
  __pyx_t_40 = __Pyx_Enum_Interp_to_py(__pyx_e_8pysndlib_3clm_NONE); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 3298, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
 3299:     """
 3300:     return a new comb filter (a delay line with a scaler on the feedback) of size elements. if the comb
 3301:     length will be changing at run-time, max-size sets its maximum length.       
 3302:     
 3303:     :param feedback: scaler on feedback
 3304:     :param size: delay length \in samples
 3305:     :param initial_contents: delay line's initial values
 3306:     :param initial_element: delay line's initial element
 3307:     :param max_size: maximum delay size \in case the delay changes
 3308:     :param type: interpolation type
 3309:     :return: comb gen
 3310:     :rtype: mus_any
 3311:         
 3312:     """
 3313: 
+3314:     check_range('size', size, 0.0, None)
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_check_range); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3314, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  __pyx_t_4 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
      __pyx_t_4 = 1;
    }
  }
  {
    PyObject *__pyx_callargs[5] = {__pyx_t_3, __pyx_n_s_size, __pyx_v_size, __pyx_float_0_0, Py_None};
    __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 4+__pyx_t_4);
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3314, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 3315: 
+3316:     cdef double [:] initial_contents_view = None
  __pyx_t_5 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(Py_None, PyBUF_WRITABLE); if (unlikely(!__pyx_t_5.memview)) __PYX_ERR(0, 3316, __pyx_L1_error)
  __pyx_v_initial_contents_view = __pyx_t_5;
  __pyx_t_5.memview = NULL;
  __pyx_t_5.data = NULL;
 3317: 
+3318:     if not max_size:
  __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_v_max_size); if (unlikely((__pyx_t_6 < 0))) __PYX_ERR(0, 3318, __pyx_L1_error)
  __pyx_t_7 = (!__pyx_t_6);
  if (__pyx_t_7) {
/* … */
  }
+3319:         max_size = size
    __Pyx_INCREF(__pyx_v_size);
    __Pyx_DECREF_SET(__pyx_v_max_size, __pyx_v_size);
 3320: 
+3321:     if max_size != size and interp_type == Interp.NONE:
  __pyx_t_1 = PyObject_RichCompare(__pyx_v_max_size, __pyx_v_size, Py_NE); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3321, __pyx_L1_error)
  __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_6 < 0))) __PYX_ERR(0, 3321, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_6) {
  } else {
    __pyx_t_7 = __pyx_t_6;
    goto __pyx_L5_bool_binop_done;
  }
  __pyx_t_1 = __Pyx_Enum_Interp_to_py(__pyx_e_8pysndlib_3clm_NONE); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3321, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = PyObject_RichCompare(__pyx_v_interp_type, __pyx_t_1, Py_EQ); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3321, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_6 < 0))) __PYX_ERR(0, 3321, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_7 = __pyx_t_6;
  __pyx_L5_bool_binop_done:;
  if (__pyx_t_7) {
/* … */
  }
+3322:         interp_type = Interp.BEZIER #think this is correct from clm2xen.c
    __pyx_t_2 = __Pyx_Enum_Interp_to_py(__pyx_e_8pysndlib_3clm_BEZIER); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3322, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF_SET(__pyx_v_interp_type, __pyx_t_2);
    __pyx_t_2 = 0;
 3323: 
+3324:     if initial_contents is not None:
  __pyx_t_7 = (__pyx_v_initial_contents != Py_None);
  if (__pyx_t_7) {
/* … */
    goto __pyx_L7;
  }
+3325:         if isinstance(initial_contents, list):
    __pyx_t_7 = PyList_Check(__pyx_v_initial_contents); 
    if (__pyx_t_7) {
/* … */
    }
+3326:             initial_contents = np.array(initial_contents)
      __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3326, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_array); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3326, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_1 = NULL;
      __pyx_t_4 = 0;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
        __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_3);
        if (likely(__pyx_t_1)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
          __Pyx_INCREF(__pyx_t_1);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_3, function);
          __pyx_t_4 = 1;
        }
      }
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_1, __pyx_v_initial_contents};
        __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4);
        __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
        if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3326, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      }
      __Pyx_DECREF_SET(__pyx_v_initial_contents, __pyx_t_2);
      __pyx_t_2 = 0;
+3327:         check_ndim(initial_contents)
    __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_check_ndim); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3327, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_1 = NULL;
    __pyx_t_4 = 0;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
      __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_3);
      if (likely(__pyx_t_1)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
        __Pyx_INCREF(__pyx_t_1);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_3, function);
        __pyx_t_4 = 1;
      }
    }
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_1, __pyx_v_initial_contents};
      __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4);
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3327, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    }
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+3328:         initial_contents_view = initial_contents
    __pyx_t_5 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_initial_contents, PyBUF_WRITABLE); if (unlikely(!__pyx_t_5.memview)) __PYX_ERR(0, 3328, __pyx_L1_error)
    __PYX_XCLEAR_MEMVIEW(&__pyx_v_initial_contents_view, 1);
    __pyx_v_initial_contents_view = __pyx_t_5;
    __pyx_t_5.memview = NULL;
    __pyx_t_5.data = NULL;
 3329: 
+3330:     elif initial_element:
  __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_v_initial_element); if (unlikely((__pyx_t_7 < 0))) __PYX_ERR(0, 3330, __pyx_L1_error)
  if (__pyx_t_7) {
/* … */
  }
  __pyx_L7:;
+3331:         initial_contents = np.zeros(max_size)
    __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3331, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_zeros); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3331, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_3 = NULL;
    __pyx_t_4 = 0;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) {
      __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_1);
      if (likely(__pyx_t_3)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
        __Pyx_INCREF(__pyx_t_3);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_1, function);
        __pyx_t_4 = 1;
      }
    }
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_v_max_size};
      __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4);
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3331, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    }
    __Pyx_DECREF_SET(__pyx_v_initial_contents, __pyx_t_2);
    __pyx_t_2 = 0;
+3332:         check_ndim(initial_contents)
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_check_ndim); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3332, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_3 = NULL;
    __pyx_t_4 = 0;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) {
      __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_1);
      if (likely(__pyx_t_3)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
        __Pyx_INCREF(__pyx_t_3);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_1, function);
        __pyx_t_4 = 1;
      }
    }
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_v_initial_contents};
      __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4);
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3332, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    }
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+3333:         initial_contents.fill(initial_element)
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_initial_contents, __pyx_n_s_fill); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3333, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_3 = NULL;
    __pyx_t_4 = 0;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) {
      __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_1);
      if (likely(__pyx_t_3)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
        __Pyx_INCREF(__pyx_t_3);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_1, function);
        __pyx_t_4 = 1;
      }
    }
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_v_initial_element};
      __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4);
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3333, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    }
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+3334:         initial_contents_view = initial_contents
    __pyx_t_5 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_initial_contents, PyBUF_WRITABLE); if (unlikely(!__pyx_t_5.memview)) __PYX_ERR(0, 3334, __pyx_L1_error)
    __PYX_XCLEAR_MEMVIEW(&__pyx_v_initial_contents_view, 1);
    __pyx_v_initial_contents_view = __pyx_t_5;
    __pyx_t_5.memview = NULL;
    __pyx_t_5.data = NULL;
 3335: 
+3336:     if initial_contents_view is not None:
  __pyx_t_7 = (((PyObject *) __pyx_v_initial_contents_view.memview) != Py_None);
  if (__pyx_t_7) {
/* … */
    goto __pyx_L9;
  }
+3337:         gen = mus_any.from_ptr(cclm.mus_make_comb(feedback, size, &initial_contents_view[0], max_size, interp_type))
    __pyx_t_8 = __pyx_PyFloat_AsDouble(__pyx_v_feedback); if (unlikely((__pyx_t_8 == ((mus_float_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 3337, __pyx_L1_error)
    __pyx_t_4 = __Pyx_PyInt_As_int(__pyx_v_size); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 3337, __pyx_L1_error)
    __pyx_t_9 = 0;
    __pyx_t_10 = -1;
    if (__pyx_t_9 < 0) {
      __pyx_t_9 += __pyx_v_initial_contents_view.shape[0];
      if (unlikely(__pyx_t_9 < 0)) __pyx_t_10 = 0;
    } else if (unlikely(__pyx_t_9 >= __pyx_v_initial_contents_view.shape[0])) __pyx_t_10 = 0;
    if (unlikely(__pyx_t_10 != -1)) {
      __Pyx_RaiseBufferIndexError(__pyx_t_10);
      __PYX_ERR(0, 3337, __pyx_L1_error)
    }
    __pyx_t_10 = __Pyx_PyInt_As_int(__pyx_v_max_size); if (unlikely((__pyx_t_10 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 3337, __pyx_L1_error)
    __pyx_t_11 = ((mus_interp_t)__Pyx_PyInt_As_mus_interp_t(__pyx_v_interp_type)); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 3337, __pyx_L1_error)
    __pyx_t_2 = ((PyObject *)__pyx_vtabptr_8pysndlib_3clm_mus_any->from_ptr(mus_make_comb(__pyx_t_8, __pyx_t_4, (&(*((double *) ( /* dim=0 */ (__pyx_v_initial_contents_view.data + __pyx_t_9 * __pyx_v_initial_contents_view.strides[0]) )))), __pyx_t_10, __pyx_t_11), NULL)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3337, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_v_gen = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)__pyx_t_2);
    __pyx_t_2 = 0;
 3338:     else:
+3339:         gen = mus_any.from_ptr(cclm.mus_make_comb(feedback, size, NULL, max_size, interp_type))
  /*else*/ {
    __pyx_t_8 = __pyx_PyFloat_AsDouble(__pyx_v_feedback); if (unlikely((__pyx_t_8 == ((mus_float_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 3339, __pyx_L1_error)
    __pyx_t_10 = __Pyx_PyInt_As_int(__pyx_v_size); if (unlikely((__pyx_t_10 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 3339, __pyx_L1_error)
    __pyx_t_4 = __Pyx_PyInt_As_int(__pyx_v_max_size); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 3339, __pyx_L1_error)
    __pyx_t_11 = ((mus_interp_t)__Pyx_PyInt_As_mus_interp_t(__pyx_v_interp_type)); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 3339, __pyx_L1_error)
    __pyx_t_2 = ((PyObject *)__pyx_vtabptr_8pysndlib_3clm_mus_any->from_ptr(mus_make_comb(__pyx_t_8, __pyx_t_10, NULL, __pyx_t_4, __pyx_t_11), NULL)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3339, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_v_gen = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)__pyx_t_2);
    __pyx_t_2 = 0;
  }
  __pyx_L9:;
+3340:     gen.cache_append(initial_contents)
  __pyx_t_2 = ((struct __pyx_vtabstruct_8pysndlib_3clm_mus_any *)__pyx_v_gen->__pyx_vtab)->cache_append(__pyx_v_gen, __pyx_v_initial_contents, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3340, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+3341:     return gen
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __Pyx_INCREF((PyObject *)__pyx_v_gen);
  __pyx_r = __pyx_v_gen;
  goto __pyx_L0;
 3342: 
+3343: cpdef cython.double comb(gen: mus_any, insig: float, pm: Optional[float]=None):
static PyObject *__pyx_pw_8pysndlib_3clm_363comb(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static double __pyx_f_8pysndlib_3clm_comb(struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen, double __pyx_v_insig, CYTHON_UNUSED int __pyx_skip_dispatch, struct __pyx_opt_args_8pysndlib_3clm_comb *__pyx_optional_args) {
  PyObject *__pyx_v_pm = ((PyObject *)Py_None);
  double __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("comb", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_pm = __pyx_optional_args->pm;
    }
  }
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("pysndlib.clm.comb", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_363comb(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_362comb, "\n    comb filter val, pm changes the delay length.\n    \n    :param gen: comb gen\n    :param insig: input value\n    :param pm: change \\in delay length size. can be + or -\n    :rtype: float\n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_363comb = {"comb", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_363comb, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_362comb};
static PyObject *__pyx_pw_8pysndlib_3clm_363comb(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen = 0;
  double __pyx_v_insig;
  PyObject *__pyx_v_pm = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("comb (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_gen,&__pyx_n_s_insig,&__pyx_n_s_pm,0};
    PyObject* values[3] = {0,0,0};
    values[2] = ((PyObject *)Py_None);
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_gen)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 3343, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_insig)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 3343, __pyx_L3_error)
        else {
          __Pyx_RaiseArgtupleInvalid("comb", 0, 2, 3, 1); __PYX_ERR(0, 3343, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_pm);
          if (value) { values[2] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 3343, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "comb") < 0)) __PYX_ERR(0, 3343, __pyx_L3_error)
      }
    } else {
      switch (__pyx_nargs) {
        case  3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_gen = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)values[0]);
    __pyx_v_insig = __pyx_PyFloat_AsDouble(values[1]); if (unlikely((__pyx_v_insig == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 3343, __pyx_L3_error)
    __pyx_v_pm = values[2];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("comb", 0, 2, 3, __pyx_nargs); __PYX_ERR(0, 3343, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.comb", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_gen), __pyx_ptype_8pysndlib_3clm_mus_any, 0, "gen", 0))) __PYX_ERR(0, 3343, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pysndlib_3clm_362comb(__pyx_self, __pyx_v_gen, __pyx_v_insig, __pyx_v_pm);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_362comb(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen, double __pyx_v_insig, PyObject *__pyx_v_pm) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("comb", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2.__pyx_n = 1;
  __pyx_t_2.pm = __pyx_v_pm;
  __pyx_t_1 = __pyx_f_8pysndlib_3clm_comb(__pyx_v_gen, __pyx_v_insig, 0, &__pyx_t_2); if (unlikely(__pyx_t_1 == ((double)-1) && PyErr_Occurred())) __PYX_ERR(0, 3343, __pyx_L1_error)
  __pyx_t_3 = PyFloat_FromDouble(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3343, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_r = __pyx_t_3;
  __pyx_t_3 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("pysndlib.clm.comb", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_41 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 3343, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  if (PyDict_SetItem(__pyx_t_41, __pyx_n_s_gen, __pyx_n_s_mus_any) < 0) __PYX_ERR(0, 3343, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_41, __pyx_n_s_insig, __pyx_n_s_float) < 0) __PYX_ERR(0, 3343, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_41, __pyx_n_s_pm, __pyx_kp_s_Optional_float) < 0) __PYX_ERR(0, 3343, __pyx_L1_error)
  __pyx_t_40 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_363comb, 0, __pyx_n_s_comb, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__404)); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 3343, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_40, __pyx_tuple__258);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_40, __pyx_t_41);
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_comb, __pyx_t_40) < 0) __PYX_ERR(0, 3343, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
/* … */
  __pyx_codeobj__404 = (PyObject*)__Pyx_PyCode_New(3, 0, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__395, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_comb, 3343, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__404)) __PYX_ERR(0, 3343, __pyx_L1_error)
/* … */
struct __pyx_opt_args_8pysndlib_3clm_comb {
  int __pyx_n;
  PyObject *pm;
};
 3344:     """
 3345:     comb filter val, pm changes the delay length.
 3346:     
 3347:     :param gen: comb gen
 3348:     :param insig: input value
 3349:     :param pm: change \in delay length size. can be + or -
 3350:     :rtype: float
 3351:     """
+3352:     if pm:
  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_pm); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 3352, __pyx_L1_error)
  if (__pyx_t_1) {
/* … */
  }
+3353:         return cclm.mus_comb(gen._ptr, insig, pm)
    __pyx_t_2 = __pyx_PyFloat_AsDouble(__pyx_v_pm); if (unlikely((__pyx_t_2 == ((mus_float_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 3353, __pyx_L1_error)
    __pyx_r = mus_comb(__pyx_v_gen->_ptr, __pyx_v_insig, __pyx_t_2);
    goto __pyx_L0;
 3354:     else:
+3355:         return cclm.mus_comb_unmodulated(gen._ptr, insig)
  /*else*/ {
    __pyx_r = mus_comb_unmodulated(__pyx_v_gen->_ptr, __pyx_v_insig);
    goto __pyx_L0;
  }
 3356: 
+3357: cpdef bint is_comb(gen: mus_any):
static PyObject *__pyx_pw_8pysndlib_3clm_365is_comb(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static int __pyx_f_8pysndlib_3clm_is_comb(struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen, CYTHON_UNUSED int __pyx_skip_dispatch) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_comb", 0);
/* … */
  /* function exit code */
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_365is_comb(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_364is_comb, "\n    returns True if gen is a comb.\n    \n    :param gen: gen\n    :rtype: bool\n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_365is_comb = {"is_comb", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_365is_comb, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_364is_comb};
static PyObject *__pyx_pw_8pysndlib_3clm_365is_comb(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_comb (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_gen,0};
    PyObject* values[1] = {0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_gen)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 3357, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "is_comb") < 0)) __PYX_ERR(0, 3357, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
    }
    __pyx_v_gen = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)values[0]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("is_comb", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 3357, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.is_comb", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_gen), __pyx_ptype_8pysndlib_3clm_mus_any, 0, "gen", 0))) __PYX_ERR(0, 3357, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pysndlib_3clm_364is_comb(__pyx_self, __pyx_v_gen);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_364is_comb(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_comb", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_8pysndlib_3clm_is_comb(__pyx_v_gen, 0); if (unlikely(__pyx_t_1 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 3357, __pyx_L1_error)
  __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3357, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pysndlib.clm.is_comb", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_40 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 3357, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  if (PyDict_SetItem(__pyx_t_40, __pyx_n_s_gen, __pyx_n_s_mus_any) < 0) __PYX_ERR(0, 3357, __pyx_L1_error)
  __pyx_t_41 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_365is_comb, 0, __pyx_n_s_is_comb, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__405)); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 3357, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_41, __pyx_t_40);
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_is_comb, __pyx_t_41) < 0) __PYX_ERR(0, 3357, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
/* … */
  __pyx_codeobj__405 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__46, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_is_comb, 3357, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__405)) __PYX_ERR(0, 3357, __pyx_L1_error)
 3358:     """
 3359:     returns True if gen is a comb.
 3360:     
 3361:     :param gen: gen
 3362:     :rtype: bool
 3363:     """
+3364:     return cclm.mus_is_comb(gen._ptr)
  __pyx_r = mus_is_comb(__pyx_v_gen->_ptr);
  goto __pyx_L0;
 3365: 
 3366: # ---------------- comb-bank ---------------- #
+3367: cpdef mus_any make_comb_bank(combs: list):
static PyObject *__pyx_pw_8pysndlib_3clm_367make_comb_bank(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_f_8pysndlib_3clm_make_comb_bank(PyObject *__pyx_v_combs, CYTHON_UNUSED int __pyx_skip_dispatch) {
  PyObject *__pyx_v_p = NULL;
  struct __pyx_obj_8pysndlib_3clm_mus_any_array *__pyx_v_comb_array = NULL;
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen = NULL;
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("make_comb_bank", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pysndlib.clm.make_comb_bank", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_p);
  __Pyx_XDECREF((PyObject *)__pyx_v_comb_array);
  __Pyx_XDECREF((PyObject *)__pyx_v_gen);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_367make_comb_bank(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_366make_comb_bank, "\n    return a new comb-bank generator.\n    \n    :param combs: list of comb gens\n    :return: comb_bank gen\n    :rtype: mus_any\n    \n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_367make_comb_bank = {"make_comb_bank", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_367make_comb_bank, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_366make_comb_bank};
static PyObject *__pyx_pw_8pysndlib_3clm_367make_comb_bank(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_combs = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("make_comb_bank (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_combs,0};
    PyObject* values[1] = {0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_combs)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 3367, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "make_comb_bank") < 0)) __PYX_ERR(0, 3367, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
    }
    __pyx_v_combs = ((PyObject*)values[0]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("make_comb_bank", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 3367, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.make_comb_bank", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_combs), (&PyList_Type), 0, "combs", 1))) __PYX_ERR(0, 3367, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pysndlib_3clm_366make_comb_bank(__pyx_self, __pyx_v_combs);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_366make_comb_bank(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_combs) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("make_comb_bank", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = ((PyObject *)__pyx_f_8pysndlib_3clm_make_comb_bank(__pyx_v_combs, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3367, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pysndlib.clm.make_comb_bank", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__406 = PyTuple_Pack(1, __pyx_n_s_combs); if (unlikely(!__pyx_tuple__406)) __PYX_ERR(0, 3367, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__406);
  __Pyx_GIVEREF(__pyx_tuple__406);
/* … */
  __pyx_t_41 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 3367, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  if (PyDict_SetItem(__pyx_t_41, __pyx_n_s_combs, __pyx_n_s_list) < 0) __PYX_ERR(0, 3367, __pyx_L1_error)
  __pyx_t_40 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_367make_comb_bank, 0, __pyx_n_s_make_comb_bank, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__407)); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 3367, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_40, __pyx_t_41);
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_make_comb_bank, __pyx_t_40) < 0) __PYX_ERR(0, 3367, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
  __pyx_codeobj__407 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__406, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_make_comb_bank, 3367, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__407)) __PYX_ERR(0, 3367, __pyx_L1_error)
 3368:     """
 3369:     return a new comb-bank generator.
 3370:     
 3371:     :param combs: list of comb gens
 3372:     :return: comb_bank gen
 3373:     :rtype: mus_any
 3374:     
 3375:     """
 3376: 
+3377:     p = list(map(is_comb, combs))
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_is_comb); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3377, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3377, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1);
  __Pyx_INCREF(__pyx_v_combs);
  __Pyx_GIVEREF(__pyx_v_combs);
  PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_combs);
  __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_map, __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3377, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PySequence_ListKeepNew(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3377, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_p = ((PyObject*)__pyx_t_2);
  __pyx_t_2 = 0;
+3378:     if not all(p):
  __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_builtin_all, __pyx_v_p); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3378, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(0, 3378, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_4 = (!__pyx_t_3);
  if (unlikely(__pyx_t_4)) {
/* … */
  }
+3379:         raise TypeError(f'filter list contains at least one element that is not a formant.')
    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__32, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3379, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __PYX_ERR(0, 3379, __pyx_L1_error)
 3380: 
+3381:     comb_array = mus_any_array.from_pylist(combs)
  __pyx_t_2 = ((PyObject *)__pyx_f_8pysndlib_3clm_13mus_any_array_from_pylist(__pyx_v_combs)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3381, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_v_comb_array = ((struct __pyx_obj_8pysndlib_3clm_mus_any_array *)__pyx_t_2);
  __pyx_t_2 = 0;
 3382: 
+3383:     gen = mus_any.from_ptr(cclm.mus_make_comb_bank(len(combs), comb_array.data))
  __pyx_t_5 = PyList_GET_SIZE(__pyx_v_combs); if (unlikely(__pyx_t_5 == ((Py_ssize_t)-1))) __PYX_ERR(0, 3383, __pyx_L1_error)
  __pyx_t_2 = ((PyObject *)__pyx_vtabptr_8pysndlib_3clm_mus_any->from_ptr(mus_make_comb_bank(__pyx_t_5, __pyx_v_comb_array->data), NULL)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3383, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_v_gen = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)__pyx_t_2);
  __pyx_t_2 = 0;
+3384:     gen.cache_extend([comb_array, combs])
  __pyx_t_2 = PyList_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3384, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF((PyObject *)__pyx_v_comb_array);
  __Pyx_GIVEREF((PyObject *)__pyx_v_comb_array);
  PyList_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_v_comb_array));
  __Pyx_INCREF(__pyx_v_combs);
  __Pyx_GIVEREF(__pyx_v_combs);
  PyList_SET_ITEM(__pyx_t_2, 1, __pyx_v_combs);
  __pyx_t_1 = ((struct __pyx_vtabstruct_8pysndlib_3clm_mus_any *)__pyx_v_gen->__pyx_vtab)->cache_extend(__pyx_v_gen, __pyx_t_2, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3384, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+3385:     return gen
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __Pyx_INCREF((PyObject *)__pyx_v_gen);
  __pyx_r = __pyx_v_gen;
  goto __pyx_L0;
 3386: 
+3387: cpdef cython.double comb_bank(gen: mus_any, insig: float):
static PyObject *__pyx_pw_8pysndlib_3clm_369comb_bank(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static double __pyx_f_8pysndlib_3clm_comb_bank(struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen, double __pyx_v_insig, CYTHON_UNUSED int __pyx_skip_dispatch) {
  double __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("comb_bank", 0);
/* … */
  /* function exit code */
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_369comb_bank(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_368comb_bank, "\n    sum an array of comb filters.\n    \n    :param gen: comb_bank gen\n    :param inputs: can be a list/array of inputs or a single input\n    :rtype: float\n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_369comb_bank = {"comb_bank", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_369comb_bank, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_368comb_bank};
static PyObject *__pyx_pw_8pysndlib_3clm_369comb_bank(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen = 0;
  double __pyx_v_insig;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("comb_bank (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_gen,&__pyx_n_s_insig,0};
    PyObject* values[2] = {0,0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_gen)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 3387, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_insig)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 3387, __pyx_L3_error)
        else {
          __Pyx_RaiseArgtupleInvalid("comb_bank", 1, 2, 2, 1); __PYX_ERR(0, 3387, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "comb_bank") < 0)) __PYX_ERR(0, 3387, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 2)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
      values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
    }
    __pyx_v_gen = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)values[0]);
    __pyx_v_insig = __pyx_PyFloat_AsDouble(values[1]); if (unlikely((__pyx_v_insig == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 3387, __pyx_L3_error)
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("comb_bank", 1, 2, 2, __pyx_nargs); __PYX_ERR(0, 3387, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.comb_bank", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_gen), __pyx_ptype_8pysndlib_3clm_mus_any, 0, "gen", 0))) __PYX_ERR(0, 3387, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pysndlib_3clm_368comb_bank(__pyx_self, __pyx_v_gen, __pyx_v_insig);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_368comb_bank(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen, double __pyx_v_insig) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("comb_bank", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_8pysndlib_3clm_comb_bank(__pyx_v_gen, __pyx_v_insig, 0); if (unlikely(__pyx_t_1 == ((double)-1) && PyErr_Occurred())) __PYX_ERR(0, 3387, __pyx_L1_error)
  __pyx_t_2 = PyFloat_FromDouble(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3387, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pysndlib.clm.comb_bank", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_40 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 3387, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  if (PyDict_SetItem(__pyx_t_40, __pyx_n_s_gen, __pyx_n_s_mus_any) < 0) __PYX_ERR(0, 3387, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_40, __pyx_n_s_insig, __pyx_n_s_float) < 0) __PYX_ERR(0, 3387, __pyx_L1_error)
  __pyx_t_41 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_369comb_bank, 0, __pyx_n_s_comb_bank, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__408)); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 3387, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_41, __pyx_t_40);
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_comb_bank, __pyx_t_41) < 0) __PYX_ERR(0, 3387, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
/* … */
  __pyx_codeobj__408 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__350, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_comb_bank, 3387, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__408)) __PYX_ERR(0, 3387, __pyx_L1_error)
 3388:     """
 3389:     sum an array of comb filters.
 3390:     
 3391:     :param gen: comb_bank gen
 3392:     :param inputs: can be a list/array of inputs or a single input
 3393:     :rtype: float
 3394:     """
+3395:     return cclm.mus_comb_bank(gen._ptr, insig)
  __pyx_r = mus_comb_bank(__pyx_v_gen->_ptr, __pyx_v_insig);
  goto __pyx_L0;
 3396: 
+3397: cpdef bint is_comb_bank(gen: mus_any):
static PyObject *__pyx_pw_8pysndlib_3clm_371is_comb_bank(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static int __pyx_f_8pysndlib_3clm_is_comb_bank(struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen, CYTHON_UNUSED int __pyx_skip_dispatch) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_comb_bank", 0);
/* … */
  /* function exit code */
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_371is_comb_bank(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_370is_comb_bank, "\n    returns True if gen is a comb_bank\n    \n    :param gen: gen\n    :rtype: bool\n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_371is_comb_bank = {"is_comb_bank", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_371is_comb_bank, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_370is_comb_bank};
static PyObject *__pyx_pw_8pysndlib_3clm_371is_comb_bank(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_comb_bank (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_gen,0};
    PyObject* values[1] = {0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_gen)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 3397, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "is_comb_bank") < 0)) __PYX_ERR(0, 3397, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
    }
    __pyx_v_gen = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)values[0]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("is_comb_bank", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 3397, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.is_comb_bank", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_gen), __pyx_ptype_8pysndlib_3clm_mus_any, 0, "gen", 0))) __PYX_ERR(0, 3397, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pysndlib_3clm_370is_comb_bank(__pyx_self, __pyx_v_gen);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_370is_comb_bank(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_comb_bank", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_8pysndlib_3clm_is_comb_bank(__pyx_v_gen, 0); if (unlikely(__pyx_t_1 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 3397, __pyx_L1_error)
  __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3397, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pysndlib.clm.is_comb_bank", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_41 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 3397, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  if (PyDict_SetItem(__pyx_t_41, __pyx_n_s_gen, __pyx_n_s_mus_any) < 0) __PYX_ERR(0, 3397, __pyx_L1_error)
  __pyx_t_40 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_371is_comb_bank, 0, __pyx_n_s_is_comb_bank, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__409)); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 3397, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_40, __pyx_t_41);
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_is_comb_bank, __pyx_t_40) < 0) __PYX_ERR(0, 3397, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
/* … */
  __pyx_codeobj__409 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__46, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_is_comb_bank, 3397, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__409)) __PYX_ERR(0, 3397, __pyx_L1_error)
 3398:     """
 3399:     returns True if gen is a comb_bank
 3400:     
 3401:     :param gen: gen
 3402:     :rtype: bool
 3403:     """
+3404:     return cclm.mus_is_comb_bank(gen._ptr)
  __pyx_r = mus_is_comb_bank(__pyx_v_gen->_ptr);
  goto __pyx_L0;
 3405: 
 3406: 
 3407: # ---------------- filtered-comb ---------------- #
+3408: cpdef mus_any make_filtered_comb(feedback:  float,
static PyObject *__pyx_pw_8pysndlib_3clm_373make_filtered_comb(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_f_8pysndlib_3clm_make_filtered_comb(double __pyx_v_feedback, PyObject *__pyx_v_size, struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_filter, CYTHON_UNUSED int __pyx_skip_dispatch, struct __pyx_opt_args_8pysndlib_3clm_make_filtered_comb *__pyx_optional_args) {
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __PYX_XCLEAR_MEMVIEW(&__pyx_t_5, 1);
  __Pyx_AddTraceback("pysndlib.clm.make_filtered_comb", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __PYX_XCLEAR_MEMVIEW(&__pyx_v_initial_contents_view, 1);
  __Pyx_XDECREF((PyObject *)__pyx_v_gen);
  __Pyx_XDECREF(__pyx_v_initial_contents);
  __Pyx_XDECREF(__pyx_v_max_size);
  __Pyx_XDECREF(__pyx_v_interp_type);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_373make_filtered_comb(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_372make_filtered_comb, "\n    return a new filtered comb filter (a delay line with a scaler and a filter on the feedback) of size\n    elements. if the comb length will be changing at run-time, max-size sets its maximum length.     \n    \n    :param feedback: scaler on feedback\n    :param size: delay length \\in samples\n    :param filter: filter to apply \n    :param initial_contents: delay line's initial values\n    :param initial_element: delay line's initial element\n    :param max_size: maximum delay size \\in case the delay changes\n    :param type: interpolation type\n    :return: filtered_comb gen\n    :rtype: mus_any\n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_373make_filtered_comb = {"make_filtered_comb", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_373make_filtered_comb, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_372make_filtered_comb};
static PyObject *__pyx_pw_8pysndlib_3clm_373make_filtered_comb(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  double __pyx_v_feedback;
  PyObject *__pyx_v_size = 0;
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_filter = 0;
  PyObject *__pyx_v_initial_contents = 0;
  PyObject *__pyx_v_initial_element = 0;
  PyObject *__pyx_v_max_size = 0;
  PyObject *__pyx_v_interp_type = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("make_filtered_comb (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_feedback,&__pyx_n_s_size,&__pyx_n_s_filter,&__pyx_n_s_initial_contents,&__pyx_n_s_initial_element,&__pyx_n_s_max_size,&__pyx_n_s_interp_type,0};
    PyObject* values[7] = {0,0,0,0,0,0,0};
/* … */
  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_372make_filtered_comb(CYTHON_UNUSED PyObject *__pyx_self, double __pyx_v_feedback, PyObject *__pyx_v_size, struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_filter, PyObject *__pyx_v_initial_contents, PyObject *__pyx_v_initial_element, PyObject *__pyx_v_max_size, PyObject *__pyx_v_interp_type) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("make_filtered_comb", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2.__pyx_n = 4;
  __pyx_t_2.initial_contents = __pyx_v_initial_contents;
  __pyx_t_2.initial_element = __pyx_v_initial_element;
  __pyx_t_2.max_size = __pyx_v_max_size;
  __pyx_t_2.interp_type = __pyx_v_interp_type;
  __pyx_t_1 = ((PyObject *)__pyx_f_8pysndlib_3clm_make_filtered_comb(__pyx_v_feedback, __pyx_v_size, __pyx_v_filter, 0, &__pyx_t_2)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3408, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pysndlib.clm.make_filtered_comb", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__410 = PyTuple_Pack(7, __pyx_n_s_feedback, __pyx_n_s_size, __pyx_n_s_filter, __pyx_n_s_initial_contents, __pyx_n_s_initial_element, __pyx_n_s_max_size, __pyx_n_s_interp_type); if (unlikely(!__pyx_tuple__410)) __PYX_ERR(0, 3408, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__410);
  __Pyx_GIVEREF(__pyx_tuple__410);
/* … */
  __pyx_t_41 = PyTuple_New(4); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 3408, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  PyTuple_SET_ITEM(__pyx_t_41, 0, Py_None);
  __Pyx_INCREF(__pyx_float_0_0);
  __Pyx_GIVEREF(__pyx_float_0_0);
  PyTuple_SET_ITEM(__pyx_t_41, 1, __pyx_float_0_0);
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  PyTuple_SET_ITEM(__pyx_t_41, 2, Py_None);
  __Pyx_GIVEREF(__pyx_t_40);
  PyTuple_SET_ITEM(__pyx_t_41, 3, __pyx_t_40);
  __pyx_t_40 = 0;
  __pyx_t_40 = __Pyx_PyDict_NewPresized(5); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 3408, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  if (PyDict_SetItem(__pyx_t_40, __pyx_n_s_feedback, __pyx_n_s_float) < 0) __PYX_ERR(0, 3408, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_40, __pyx_n_s_size, __pyx_n_s_int_2) < 0) __PYX_ERR(0, 3408, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_40, __pyx_n_s_filter, __pyx_n_s_mus_any) < 0) __PYX_ERR(0, 3408, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_40, __pyx_n_s_initial_element, __pyx_kp_s_Optional_cython_double) < 0) __PYX_ERR(0, 3408, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_40, __pyx_n_s_max_size, __pyx_kp_s_Optional_int) < 0) __PYX_ERR(0, 3408, __pyx_L1_error)
  __pyx_t_37 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_373make_filtered_comb, 0, __pyx_n_s_make_filtered_comb, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__411)); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 3408, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_37, __pyx_t_41);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_37, __pyx_t_40);
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_make_filtered_comb, __pyx_t_37) < 0) __PYX_ERR(0, 3408, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
  __pyx_codeobj__411 = (PyObject*)__Pyx_PyCode_New(7, 0, 0, 7, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__410, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_make_filtered_comb, 3408, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__411)) __PYX_ERR(0, 3408, __pyx_L1_error)
/* … */
struct __pyx_opt_args_8pysndlib_3clm_make_filtered_comb {
  int __pyx_n;
  PyObject *initial_contents;
  PyObject *initial_element;
  PyObject *max_size;
  PyObject *interp_type;
};
 3409:                 size: int,
 3410:                 filter: mus_any,
+3411:                 initial_contents=None,
  PyObject *__pyx_v_initial_contents = ((PyObject *)Py_None);
  PyObject *__pyx_v_initial_element = ((PyObject *)__pyx_float_0_0);
/* … */
    values[3] = ((PyObject *)Py_None);
    values[4] = ((PyObject *)__pyx_float_0_0);
 3412:                 initial_element: Optional[ cython.double]=0.0,
+3413:                 max_size:Optional[int]=None,
  PyObject *__pyx_v_max_size = ((PyObject *)Py_None);
  PyObject *__pyx_v_interp_type = __pyx_k__35;
  __Pyx_memviewslice __pyx_v_initial_contents_view = { 0, 0, { 0 }, { 0 }, { 0 } };
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen = NULL;
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("make_filtered_comb", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_initial_contents = __pyx_optional_args->initial_contents;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_initial_element = __pyx_optional_args->initial_element;
        if (__pyx_optional_args->__pyx_n > 2) {
          __pyx_v_max_size = __pyx_optional_args->max_size;
          if (__pyx_optional_args->__pyx_n > 3) {
            __pyx_v_interp_type = __pyx_optional_args->interp_type;
          }
        }
      }
    }
  }
  __Pyx_INCREF(__pyx_v_initial_contents);
  __Pyx_INCREF(__pyx_v_max_size);
  __Pyx_INCREF(__pyx_v_interp_type);
/* … */
    values[5] = ((PyObject *)Py_None);
    values[6] = __pyx_k__35;
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  7: values[6] = __Pyx_Arg_FASTCALL(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = __Pyx_Arg_FASTCALL(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = __Pyx_Arg_FASTCALL(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_feedback)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 3408, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_size)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 3408, __pyx_L3_error)
        else {
          __Pyx_RaiseArgtupleInvalid("make_filtered_comb", 0, 3, 7, 1); __PYX_ERR(0, 3408, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_filter)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 3408, __pyx_L3_error)
        else {
          __Pyx_RaiseArgtupleInvalid("make_filtered_comb", 0, 3, 7, 2); __PYX_ERR(0, 3408, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_initial_contents);
          if (value) { values[3] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 3408, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_initial_element);
          if (value) { values[4] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 3408, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  5:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_max_size);
          if (value) { values[5] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 3408, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  6:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_interp_type);
          if (value) { values[6] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 3408, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "make_filtered_comb") < 0)) __PYX_ERR(0, 3408, __pyx_L3_error)
      }
    } else {
      switch (__pyx_nargs) {
        case  7: values[6] = __Pyx_Arg_FASTCALL(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = __Pyx_Arg_FASTCALL(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = __Pyx_Arg_FASTCALL(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
        values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_feedback = __pyx_PyFloat_AsDouble(values[0]); if (unlikely((__pyx_v_feedback == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 3408, __pyx_L3_error)
    __pyx_v_size = ((PyObject*)values[1]);
    __pyx_v_filter = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)values[2]);
    __pyx_v_initial_contents = values[3];
    __pyx_v_initial_element = values[4];
    __pyx_v_max_size = values[5];
    __pyx_v_interp_type = values[6];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("make_filtered_comb", 0, 3, 7, __pyx_nargs); __PYX_ERR(0, 3408, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.make_filtered_comb", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_size), (&PyInt_Type), 0, "size", 1))) __PYX_ERR(0, 3409, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_filter), __pyx_ptype_8pysndlib_3clm_mus_any, 0, "filter", 0))) __PYX_ERR(0, 3410, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pysndlib_3clm_372make_filtered_comb(__pyx_self, __pyx_v_feedback, __pyx_v_size, __pyx_v_filter, __pyx_v_initial_contents, __pyx_v_initial_element, __pyx_v_max_size, __pyx_v_interp_type);
+3414:                 interp_type=Interp.NONE):
  __pyx_t_40 = __Pyx_Enum_Interp_to_py(__pyx_e_8pysndlib_3clm_NONE); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 3414, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  __pyx_k__35 = __pyx_t_40;
  __Pyx_GIVEREF(__pyx_t_40);
  __pyx_t_40 = 0;
/* … */
  __pyx_t_40 = __Pyx_Enum_Interp_to_py(__pyx_e_8pysndlib_3clm_NONE); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 3414, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
 3415:                 
 3416:     """
 3417:     return a new filtered comb filter (a delay line with a scaler and a filter on the feedback) of size
 3418:     elements. if the comb length will be changing at run-time, max-size sets its maximum length.     
 3419:     
 3420:     :param feedback: scaler on feedback
 3421:     :param size: delay length \in samples
 3422:     :param filter: filter to apply 
 3423:     :param initial_contents: delay line's initial values
 3424:     :param initial_element: delay line's initial element
 3425:     :param max_size: maximum delay size \in case the delay changes
 3426:     :param type: interpolation type
 3427:     :return: filtered_comb gen
 3428:     :rtype: mus_any
 3429:     """
+3430:     check_range('size', size, 0.0, None)
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_check_range); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3430, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  __pyx_t_4 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
      __pyx_t_4 = 1;
    }
  }
  {
    PyObject *__pyx_callargs[5] = {__pyx_t_3, __pyx_n_s_size, __pyx_v_size, __pyx_float_0_0, Py_None};
    __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 4+__pyx_t_4);
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3430, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 3431: 
+3432:     cdef double [:] initial_contents_view = None
  __pyx_t_5 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(Py_None, PyBUF_WRITABLE); if (unlikely(!__pyx_t_5.memview)) __PYX_ERR(0, 3432, __pyx_L1_error)
  __pyx_v_initial_contents_view = __pyx_t_5;
  __pyx_t_5.memview = NULL;
  __pyx_t_5.data = NULL;
 3433: 
+3434:     if not max_size:
  __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_v_max_size); if (unlikely((__pyx_t_6 < 0))) __PYX_ERR(0, 3434, __pyx_L1_error)
  __pyx_t_7 = (!__pyx_t_6);
  if (__pyx_t_7) {
/* … */
  }
+3435:         max_size = size
    __Pyx_INCREF(__pyx_v_size);
    __Pyx_DECREF_SET(__pyx_v_max_size, __pyx_v_size);
 3436: 
+3437:     if max_size != size and interp_type == Interp.NONE:
  __pyx_t_1 = PyObject_RichCompare(__pyx_v_max_size, __pyx_v_size, Py_NE); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3437, __pyx_L1_error)
  __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_6 < 0))) __PYX_ERR(0, 3437, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_6) {
  } else {
    __pyx_t_7 = __pyx_t_6;
    goto __pyx_L5_bool_binop_done;
  }
  __pyx_t_1 = __Pyx_Enum_Interp_to_py(__pyx_e_8pysndlib_3clm_NONE); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3437, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = PyObject_RichCompare(__pyx_v_interp_type, __pyx_t_1, Py_EQ); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3437, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_6 < 0))) __PYX_ERR(0, 3437, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_7 = __pyx_t_6;
  __pyx_L5_bool_binop_done:;
  if (__pyx_t_7) {
/* … */
  }
+3438:         interp_type = Interp.BEZIER #think this is correct from clm2xen.c
    __pyx_t_2 = __Pyx_Enum_Interp_to_py(__pyx_e_8pysndlib_3clm_BEZIER); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3438, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF_SET(__pyx_v_interp_type, __pyx_t_2);
    __pyx_t_2 = 0;
 3439: 
+3440:     if initial_contents is not None:
  __pyx_t_7 = (__pyx_v_initial_contents != Py_None);
  if (__pyx_t_7) {
/* … */
    goto __pyx_L7;
  }
+3441:         if isinstance(initial_contents, list):
    __pyx_t_7 = PyList_Check(__pyx_v_initial_contents); 
    if (__pyx_t_7) {
/* … */
    }
+3442:             initial_contents = np.array(initial_contents)
      __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3442, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_array); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3442, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_1 = NULL;
      __pyx_t_4 = 0;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
        __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_3);
        if (likely(__pyx_t_1)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
          __Pyx_INCREF(__pyx_t_1);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_3, function);
          __pyx_t_4 = 1;
        }
      }
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_1, __pyx_v_initial_contents};
        __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4);
        __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
        if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3442, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      }
      __Pyx_DECREF_SET(__pyx_v_initial_contents, __pyx_t_2);
      __pyx_t_2 = 0;
+3443:         initial_contents_view = initial_contents
    __pyx_t_5 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_initial_contents, PyBUF_WRITABLE); if (unlikely(!__pyx_t_5.memview)) __PYX_ERR(0, 3443, __pyx_L1_error)
    __PYX_XCLEAR_MEMVIEW(&__pyx_v_initial_contents_view, 1);
    __pyx_v_initial_contents_view = __pyx_t_5;
    __pyx_t_5.memview = NULL;
    __pyx_t_5.data = NULL;
 3444: 
+3445:     elif initial_element:
  __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_v_initial_element); if (unlikely((__pyx_t_7 < 0))) __PYX_ERR(0, 3445, __pyx_L1_error)
  if (__pyx_t_7) {
/* … */
  }
  __pyx_L7:;
+3446:         initial_contents = np.zeros(max_size)
    __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3446, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_zeros); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3446, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_3 = NULL;
    __pyx_t_4 = 0;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) {
      __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_1);
      if (likely(__pyx_t_3)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
        __Pyx_INCREF(__pyx_t_3);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_1, function);
        __pyx_t_4 = 1;
      }
    }
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_v_max_size};
      __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4);
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3446, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    }
    __Pyx_DECREF_SET(__pyx_v_initial_contents, __pyx_t_2);
    __pyx_t_2 = 0;
+3447:         check_ndim(initial_contents)
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_check_ndim); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3447, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_3 = NULL;
    __pyx_t_4 = 0;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) {
      __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_1);
      if (likely(__pyx_t_3)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
        __Pyx_INCREF(__pyx_t_3);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_1, function);
        __pyx_t_4 = 1;
      }
    }
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_v_initial_contents};
      __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4);
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3447, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    }
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+3448:         initial_contents.fill(initial_element)
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_initial_contents, __pyx_n_s_fill); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3448, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_3 = NULL;
    __pyx_t_4 = 0;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) {
      __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_1);
      if (likely(__pyx_t_3)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
        __Pyx_INCREF(__pyx_t_3);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_1, function);
        __pyx_t_4 = 1;
      }
    }
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_v_initial_element};
      __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4);
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3448, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    }
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+3449:         initial_contents_view = initial_contents
    __pyx_t_5 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_initial_contents, PyBUF_WRITABLE); if (unlikely(!__pyx_t_5.memview)) __PYX_ERR(0, 3449, __pyx_L1_error)
    __PYX_XCLEAR_MEMVIEW(&__pyx_v_initial_contents_view, 1);
    __pyx_v_initial_contents_view = __pyx_t_5;
    __pyx_t_5.memview = NULL;
    __pyx_t_5.data = NULL;
 3450: 
+3451:     if initial_contents_view is not None:
  __pyx_t_7 = (((PyObject *) __pyx_v_initial_contents_view.memview) != Py_None);
  if (__pyx_t_7) {
/* … */
    goto __pyx_L9;
  }
+3452:         gen = mus_any.from_ptr(cclm.mus_make_filtered_comb(feedback, int(size), &initial_contents_view[0], int(max_size), interp_type, filter._ptr))
    __pyx_t_2 = __Pyx_PyNumber_Int(__pyx_v_size); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3452, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_4 = __Pyx_PyInt_As_int(__pyx_t_2); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 3452, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_8 = 0;
    __pyx_t_9 = -1;
    if (__pyx_t_8 < 0) {
      __pyx_t_8 += __pyx_v_initial_contents_view.shape[0];
      if (unlikely(__pyx_t_8 < 0)) __pyx_t_9 = 0;
    } else if (unlikely(__pyx_t_8 >= __pyx_v_initial_contents_view.shape[0])) __pyx_t_9 = 0;
    if (unlikely(__pyx_t_9 != -1)) {
      __Pyx_RaiseBufferIndexError(__pyx_t_9);
      __PYX_ERR(0, 3452, __pyx_L1_error)
    }
    __pyx_t_2 = __Pyx_PyNumber_Int(__pyx_v_max_size); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3452, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_9 = __Pyx_PyInt_As_int(__pyx_t_2); if (unlikely((__pyx_t_9 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 3452, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_10 = ((mus_interp_t)__Pyx_PyInt_As_mus_interp_t(__pyx_v_interp_type)); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 3452, __pyx_L1_error)
    __pyx_t_2 = ((PyObject *)__pyx_vtabptr_8pysndlib_3clm_mus_any->from_ptr(mus_make_filtered_comb(__pyx_v_feedback, __pyx_t_4, (&(*((double *) ( /* dim=0 */ (__pyx_v_initial_contents_view.data + __pyx_t_8 * __pyx_v_initial_contents_view.strides[0]) )))), __pyx_t_9, __pyx_t_10, __pyx_v_filter->_ptr), NULL)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3452, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_v_gen = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)__pyx_t_2);
    __pyx_t_2 = 0;
 3453:     else:
+3454:         gen = mus_any.from_ptr(cclm.mus_make_filtered_comb(feedback, int(size), NULL, int(max_size), interp_type, filter._ptr))
  /*else*/ {
    __pyx_t_2 = __Pyx_PyNumber_Int(__pyx_v_size); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3454, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_9 = __Pyx_PyInt_As_int(__pyx_t_2); if (unlikely((__pyx_t_9 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 3454, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_2 = __Pyx_PyNumber_Int(__pyx_v_max_size); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3454, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_4 = __Pyx_PyInt_As_int(__pyx_t_2); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 3454, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_10 = ((mus_interp_t)__Pyx_PyInt_As_mus_interp_t(__pyx_v_interp_type)); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 3454, __pyx_L1_error)
    __pyx_t_2 = ((PyObject *)__pyx_vtabptr_8pysndlib_3clm_mus_any->from_ptr(mus_make_filtered_comb(__pyx_v_feedback, __pyx_t_9, NULL, __pyx_t_4, __pyx_t_10, __pyx_v_filter->_ptr), NULL)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3454, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_v_gen = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)__pyx_t_2);
    __pyx_t_2 = 0;
  }
  __pyx_L9:;
+3455:     gen.cache_append(initial_contents)
  __pyx_t_2 = ((struct __pyx_vtabstruct_8pysndlib_3clm_mus_any *)__pyx_v_gen->__pyx_vtab)->cache_append(__pyx_v_gen, __pyx_v_initial_contents, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3455, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+3456:     return gen
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __Pyx_INCREF((PyObject *)__pyx_v_gen);
  __pyx_r = __pyx_v_gen;
  goto __pyx_L0;
 3457: 
+3458: cpdef cython.double filtered_comb(gen: mus_any, insig: float, pm: Optional[float]=None):
static PyObject *__pyx_pw_8pysndlib_3clm_375filtered_comb(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static double __pyx_f_8pysndlib_3clm_filtered_comb(struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen, double __pyx_v_insig, CYTHON_UNUSED int __pyx_skip_dispatch, struct __pyx_opt_args_8pysndlib_3clm_filtered_comb *__pyx_optional_args) {
  PyObject *__pyx_v_pm = ((PyObject *)Py_None);
  double __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("filtered_comb", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_pm = __pyx_optional_args->pm;
    }
  }
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("pysndlib.clm.filtered_comb", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_375filtered_comb(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_374filtered_comb, "\n    filtered comb filter val, pm changes the delay length.\n    \n    :param gen: filtered_comb gen\n    :param insig: input value\n    :param pm: change \\in delay length size. can be + or -\n    :rtype: float\n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_375filtered_comb = {"filtered_comb", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_375filtered_comb, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_374filtered_comb};
static PyObject *__pyx_pw_8pysndlib_3clm_375filtered_comb(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen = 0;
  double __pyx_v_insig;
  PyObject *__pyx_v_pm = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("filtered_comb (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_gen,&__pyx_n_s_insig,&__pyx_n_s_pm,0};
    PyObject* values[3] = {0,0,0};
    values[2] = ((PyObject *)Py_None);
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_gen)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 3458, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_insig)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 3458, __pyx_L3_error)
        else {
          __Pyx_RaiseArgtupleInvalid("filtered_comb", 0, 2, 3, 1); __PYX_ERR(0, 3458, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_pm);
          if (value) { values[2] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 3458, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "filtered_comb") < 0)) __PYX_ERR(0, 3458, __pyx_L3_error)
      }
    } else {
      switch (__pyx_nargs) {
        case  3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_gen = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)values[0]);
    __pyx_v_insig = __pyx_PyFloat_AsDouble(values[1]); if (unlikely((__pyx_v_insig == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 3458, __pyx_L3_error)
    __pyx_v_pm = values[2];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("filtered_comb", 0, 2, 3, __pyx_nargs); __PYX_ERR(0, 3458, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.filtered_comb", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_gen), __pyx_ptype_8pysndlib_3clm_mus_any, 0, "gen", 0))) __PYX_ERR(0, 3458, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pysndlib_3clm_374filtered_comb(__pyx_self, __pyx_v_gen, __pyx_v_insig, __pyx_v_pm);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_374filtered_comb(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen, double __pyx_v_insig, PyObject *__pyx_v_pm) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("filtered_comb", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2.__pyx_n = 1;
  __pyx_t_2.pm = __pyx_v_pm;
  __pyx_t_1 = __pyx_f_8pysndlib_3clm_filtered_comb(__pyx_v_gen, __pyx_v_insig, 0, &__pyx_t_2); if (unlikely(__pyx_t_1 == ((double)-1) && PyErr_Occurred())) __PYX_ERR(0, 3458, __pyx_L1_error)
  __pyx_t_3 = PyFloat_FromDouble(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3458, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_r = __pyx_t_3;
  __pyx_t_3 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("pysndlib.clm.filtered_comb", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_37 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 3458, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  if (PyDict_SetItem(__pyx_t_37, __pyx_n_s_gen, __pyx_n_s_mus_any) < 0) __PYX_ERR(0, 3458, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_37, __pyx_n_s_insig, __pyx_n_s_float) < 0) __PYX_ERR(0, 3458, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_37, __pyx_n_s_pm, __pyx_kp_s_Optional_float) < 0) __PYX_ERR(0, 3458, __pyx_L1_error)
  __pyx_t_40 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_375filtered_comb, 0, __pyx_n_s_filtered_comb, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__412)); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 3458, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_40, __pyx_tuple__258);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_40, __pyx_t_37);
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_filtered_comb, __pyx_t_40) < 0) __PYX_ERR(0, 3458, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
/* … */
  __pyx_codeobj__412 = (PyObject*)__Pyx_PyCode_New(3, 0, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__395, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_filtered_comb, 3458, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__412)) __PYX_ERR(0, 3458, __pyx_L1_error)
/* … */
struct __pyx_opt_args_8pysndlib_3clm_filtered_comb {
  int __pyx_n;
  PyObject *pm;
};
 3459:     """
 3460:     filtered comb filter val, pm changes the delay length.
 3461:     
 3462:     :param gen: filtered_comb gen
 3463:     :param insig: input value
 3464:     :param pm: change \in delay length size. can be + or -
 3465:     :rtype: float
 3466:     """
+3467:     if pm:
  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_pm); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 3467, __pyx_L1_error)
  if (__pyx_t_1) {
/* … */
  }
+3468:         return cclm.mus_filtered_comb(gen._ptr, insig, pm)
    __pyx_t_2 = __pyx_PyFloat_AsDouble(__pyx_v_pm); if (unlikely((__pyx_t_2 == ((mus_float_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 3468, __pyx_L1_error)
    __pyx_r = mus_filtered_comb(__pyx_v_gen->_ptr, __pyx_v_insig, __pyx_t_2);
    goto __pyx_L0;
 3469:     else:
+3470:         return cclm.mus_filtered_comb_unmodulated(gen._ptr, insig)
  /*else*/ {
    __pyx_r = mus_filtered_comb_unmodulated(__pyx_v_gen->_ptr, __pyx_v_insig);
    goto __pyx_L0;
  }
 3471: 
+3472: cpdef bint is_filtered_comb(gen: mus_any):
static PyObject *__pyx_pw_8pysndlib_3clm_377is_filtered_comb(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static int __pyx_f_8pysndlib_3clm_is_filtered_comb(struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen, CYTHON_UNUSED int __pyx_skip_dispatch) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_filtered_comb", 0);
/* … */
  /* function exit code */
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_377is_filtered_comb(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_376is_filtered_comb, "\n    returns True if gen is a filtered_comb.\n    \n    :param gen: gen\n    :rtype: bool\n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_377is_filtered_comb = {"is_filtered_comb", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_377is_filtered_comb, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_376is_filtered_comb};
static PyObject *__pyx_pw_8pysndlib_3clm_377is_filtered_comb(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_filtered_comb (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_gen,0};
    PyObject* values[1] = {0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_gen)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 3472, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "is_filtered_comb") < 0)) __PYX_ERR(0, 3472, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
    }
    __pyx_v_gen = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)values[0]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("is_filtered_comb", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 3472, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.is_filtered_comb", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_gen), __pyx_ptype_8pysndlib_3clm_mus_any, 0, "gen", 0))) __PYX_ERR(0, 3472, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pysndlib_3clm_376is_filtered_comb(__pyx_self, __pyx_v_gen);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_376is_filtered_comb(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_filtered_comb", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_8pysndlib_3clm_is_filtered_comb(__pyx_v_gen, 0); if (unlikely(__pyx_t_1 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 3472, __pyx_L1_error)
  __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3472, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pysndlib.clm.is_filtered_comb", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_40 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 3472, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  if (PyDict_SetItem(__pyx_t_40, __pyx_n_s_gen, __pyx_n_s_mus_any) < 0) __PYX_ERR(0, 3472, __pyx_L1_error)
  __pyx_t_37 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_377is_filtered_comb, 0, __pyx_n_s_is_filtered_comb, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__413)); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 3472, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_37, __pyx_t_40);
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_is_filtered_comb, __pyx_t_37) < 0) __PYX_ERR(0, 3472, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
/* … */
  __pyx_codeobj__413 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__46, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_is_filtered_comb, 3472, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__413)) __PYX_ERR(0, 3472, __pyx_L1_error)
 3473:     """
 3474:     returns True if gen is a filtered_comb.
 3475:     
 3476:     :param gen: gen
 3477:     :rtype: bool
 3478:     """
+3479:     return cclm.mus_is_filtered_comb(gen._ptr)
  __pyx_r = mus_is_filtered_comb(__pyx_v_gen->_ptr);
  goto __pyx_L0;
 3480: 
 3481: # ---------------- filtered-comb-bank ---------------- #      
+3482: cpdef mus_any make_filtered_comb_bank(fcombs: list):
static PyObject *__pyx_pw_8pysndlib_3clm_379make_filtered_comb_bank(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_f_8pysndlib_3clm_make_filtered_comb_bank(PyObject *__pyx_v_fcombs, CYTHON_UNUSED int __pyx_skip_dispatch) {
  PyObject *__pyx_v_p = NULL;
  struct __pyx_obj_8pysndlib_3clm_mus_any_array *__pyx_v_fcomb_array = NULL;
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen = NULL;
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("make_filtered_comb_bank", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pysndlib.clm.make_filtered_comb_bank", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_p);
  __Pyx_XDECREF((PyObject *)__pyx_v_fcomb_array);
  __Pyx_XDECREF((PyObject *)__pyx_v_gen);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_379make_filtered_comb_bank(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_378make_filtered_comb_bank, "\n    return a new filtered_comb-bank generator.\n    \n    :param fcombs: list of filtered_comb gens\n    :return: filtered_comb_bank gen\n    :rtype: mus_any\n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_379make_filtered_comb_bank = {"make_filtered_comb_bank", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_379make_filtered_comb_bank, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_378make_filtered_comb_bank};
static PyObject *__pyx_pw_8pysndlib_3clm_379make_filtered_comb_bank(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_fcombs = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("make_filtered_comb_bank (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_fcombs,0};
    PyObject* values[1] = {0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_fcombs)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 3482, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "make_filtered_comb_bank") < 0)) __PYX_ERR(0, 3482, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
    }
    __pyx_v_fcombs = ((PyObject*)values[0]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("make_filtered_comb_bank", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 3482, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.make_filtered_comb_bank", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_fcombs), (&PyList_Type), 0, "fcombs", 1))) __PYX_ERR(0, 3482, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pysndlib_3clm_378make_filtered_comb_bank(__pyx_self, __pyx_v_fcombs);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_378make_filtered_comb_bank(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_fcombs) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("make_filtered_comb_bank", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = ((PyObject *)__pyx_f_8pysndlib_3clm_make_filtered_comb_bank(__pyx_v_fcombs, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3482, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pysndlib.clm.make_filtered_comb_bank", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__414 = PyTuple_Pack(1, __pyx_n_s_fcombs); if (unlikely(!__pyx_tuple__414)) __PYX_ERR(0, 3482, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__414);
  __Pyx_GIVEREF(__pyx_tuple__414);
/* … */
  __pyx_t_37 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 3482, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  if (PyDict_SetItem(__pyx_t_37, __pyx_n_s_fcombs, __pyx_n_s_list) < 0) __PYX_ERR(0, 3482, __pyx_L1_error)
  __pyx_t_40 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_379make_filtered_comb_bank, 0, __pyx_n_s_make_filtered_comb_bank, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__415)); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 3482, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_40, __pyx_t_37);
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_make_filtered_comb_bank, __pyx_t_40) < 0) __PYX_ERR(0, 3482, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
  __pyx_codeobj__415 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__414, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_make_filtered_comb_bank, 3482, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__415)) __PYX_ERR(0, 3482, __pyx_L1_error)
 3483:     """
 3484:     return a new filtered_comb-bank generator.
 3485:     
 3486:     :param fcombs: list of filtered_comb gens
 3487:     :return: filtered_comb_bank gen
 3488:     :rtype: mus_any
 3489:     """
+3490:     p = list(map(is_formant, fcombs))
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_is_formant); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3490, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3490, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1);
  __Pyx_INCREF(__pyx_v_fcombs);
  __Pyx_GIVEREF(__pyx_v_fcombs);
  PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_fcombs);
  __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_map, __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3490, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PySequence_ListKeepNew(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3490, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_p = ((PyObject*)__pyx_t_2);
  __pyx_t_2 = 0;
+3491:     if not all(p):
  __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_builtin_all, __pyx_v_p); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3491, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(0, 3491, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_4 = (!__pyx_t_3);
  if (unlikely(__pyx_t_4)) {
/* … */
  }
+3492:         raise TypeError(f'filter list contains at least one element that is not a filtered_comb.')
    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__36, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3492, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __PYX_ERR(0, 3492, __pyx_L1_error)
/* … */
  __pyx_tuple__36 = PyTuple_Pack(1, __pyx_kp_u_filter_list_contains_at_least_on_2); if (unlikely(!__pyx_tuple__36)) __PYX_ERR(0, 3492, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__36);
  __Pyx_GIVEREF(__pyx_tuple__36);
 3493: 
+3494:     fcomb_array = mus_any_array.from_pylist(fcombs)
  __pyx_t_2 = ((PyObject *)__pyx_f_8pysndlib_3clm_13mus_any_array_from_pylist(__pyx_v_fcombs)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3494, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_v_fcomb_array = ((struct __pyx_obj_8pysndlib_3clm_mus_any_array *)__pyx_t_2);
  __pyx_t_2 = 0;
 3495: 
+3496:     gen =  mus_any.from_ptr(cclm.mus_make_filtered_comb_bank(len(fcombs), fcomb_array.data))
  __pyx_t_5 = PyList_GET_SIZE(__pyx_v_fcombs); if (unlikely(__pyx_t_5 == ((Py_ssize_t)-1))) __PYX_ERR(0, 3496, __pyx_L1_error)
  __pyx_t_2 = ((PyObject *)__pyx_vtabptr_8pysndlib_3clm_mus_any->from_ptr(mus_make_filtered_comb_bank(__pyx_t_5, __pyx_v_fcomb_array->data), NULL)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3496, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_v_gen = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)__pyx_t_2);
  __pyx_t_2 = 0;
+3497:     gen.cache_extend([fcomb_array, fcombs])
  __pyx_t_2 = PyList_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3497, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF((PyObject *)__pyx_v_fcomb_array);
  __Pyx_GIVEREF((PyObject *)__pyx_v_fcomb_array);
  PyList_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_v_fcomb_array));
  __Pyx_INCREF(__pyx_v_fcombs);
  __Pyx_GIVEREF(__pyx_v_fcombs);
  PyList_SET_ITEM(__pyx_t_2, 1, __pyx_v_fcombs);
  __pyx_t_1 = ((struct __pyx_vtabstruct_8pysndlib_3clm_mus_any *)__pyx_v_gen->__pyx_vtab)->cache_extend(__pyx_v_gen, __pyx_t_2, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3497, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+3498:     return gen
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __Pyx_INCREF((PyObject *)__pyx_v_gen);
  __pyx_r = __pyx_v_gen;
  goto __pyx_L0;
 3499: 
+3500: cpdef cython.double filtered_comb_bank(gen: mus_any):
static PyObject *__pyx_pw_8pysndlib_3clm_381filtered_comb_bank(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static double __pyx_f_8pysndlib_3clm_filtered_comb_bank(struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen, CYTHON_UNUSED int __pyx_skip_dispatch) {
  double __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("filtered_comb_bank", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("pysndlib.clm.filtered_comb_bank", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_381filtered_comb_bank(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_380filtered_comb_bank, "\n    sum an array of filtered_comb filters.\n    \n    :param gen: filtered_comb gen\n    :param inputs: can be a list/array of inputs or a single input\n    :rtype: float\n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_381filtered_comb_bank = {"filtered_comb_bank", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_381filtered_comb_bank, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_380filtered_comb_bank};
static PyObject *__pyx_pw_8pysndlib_3clm_381filtered_comb_bank(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("filtered_comb_bank (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_gen,0};
    PyObject* values[1] = {0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_gen)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 3500, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "filtered_comb_bank") < 0)) __PYX_ERR(0, 3500, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
    }
    __pyx_v_gen = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)values[0]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("filtered_comb_bank", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 3500, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.filtered_comb_bank", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_gen), __pyx_ptype_8pysndlib_3clm_mus_any, 0, "gen", 0))) __PYX_ERR(0, 3500, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pysndlib_3clm_380filtered_comb_bank(__pyx_self, __pyx_v_gen);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_380filtered_comb_bank(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("filtered_comb_bank", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_8pysndlib_3clm_filtered_comb_bank(__pyx_v_gen, 0); if (unlikely(__pyx_t_1 == ((double)-1) && PyErr_Occurred())) __PYX_ERR(0, 3500, __pyx_L1_error)
  __pyx_t_2 = PyFloat_FromDouble(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3500, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pysndlib.clm.filtered_comb_bank", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_40 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 3500, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  if (PyDict_SetItem(__pyx_t_40, __pyx_n_s_gen, __pyx_n_s_mus_any) < 0) __PYX_ERR(0, 3500, __pyx_L1_error)
  __pyx_t_37 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_381filtered_comb_bank, 0, __pyx_n_s_filtered_comb_bank, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__416)); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 3500, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_37, __pyx_t_40);
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_filtered_comb_bank, __pyx_t_37) < 0) __PYX_ERR(0, 3500, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
/* … */
  __pyx_codeobj__416 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__46, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_filtered_comb_bank, 3500, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__416)) __PYX_ERR(0, 3500, __pyx_L1_error)
 3501:     """
 3502:     sum an array of filtered_comb filters.
 3503:     
 3504:     :param gen: filtered_comb gen
 3505:     :param inputs: can be a list/array of inputs or a single input
 3506:     :rtype: float
 3507:     """
+3508:     return cclm.mus_filtered_comb_bank(gen._ptr, input)
  __pyx_t_1 = __pyx_PyFloat_AsDouble(__pyx_builtin_input); if (unlikely((__pyx_t_1 == ((mus_float_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 3508, __pyx_L1_error)
  __pyx_r = mus_filtered_comb_bank(__pyx_v_gen->_ptr, __pyx_t_1);
  goto __pyx_L0;
 3509: 
+3510: cpdef bint is_filtered_comb_bank(gen: mus_any):
static PyObject *__pyx_pw_8pysndlib_3clm_383is_filtered_comb_bank(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static int __pyx_f_8pysndlib_3clm_is_filtered_comb_bank(struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen, CYTHON_UNUSED int __pyx_skip_dispatch) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_filtered_comb_bank", 0);
/* … */
  /* function exit code */
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_383is_filtered_comb_bank(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_382is_filtered_comb_bank, "\n    returns True if gen is a filtered_comb_bank.\n    \n    :param gen: gen\n    :rtype: bool\n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_383is_filtered_comb_bank = {"is_filtered_comb_bank", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_383is_filtered_comb_bank, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_382is_filtered_comb_bank};
static PyObject *__pyx_pw_8pysndlib_3clm_383is_filtered_comb_bank(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_filtered_comb_bank (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_gen,0};
    PyObject* values[1] = {0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_gen)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 3510, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "is_filtered_comb_bank") < 0)) __PYX_ERR(0, 3510, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
    }
    __pyx_v_gen = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)values[0]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("is_filtered_comb_bank", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 3510, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.is_filtered_comb_bank", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_gen), __pyx_ptype_8pysndlib_3clm_mus_any, 0, "gen", 0))) __PYX_ERR(0, 3510, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pysndlib_3clm_382is_filtered_comb_bank(__pyx_self, __pyx_v_gen);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_382is_filtered_comb_bank(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_filtered_comb_bank", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_8pysndlib_3clm_is_filtered_comb_bank(__pyx_v_gen, 0); if (unlikely(__pyx_t_1 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 3510, __pyx_L1_error)
  __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3510, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pysndlib.clm.is_filtered_comb_bank", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_37 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 3510, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  if (PyDict_SetItem(__pyx_t_37, __pyx_n_s_gen, __pyx_n_s_mus_any) < 0) __PYX_ERR(0, 3510, __pyx_L1_error)
  __pyx_t_40 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_383is_filtered_comb_bank, 0, __pyx_n_s_is_filtered_comb_bank, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__417)); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 3510, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_40, __pyx_t_37);
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_is_filtered_comb_bank, __pyx_t_40) < 0) __PYX_ERR(0, 3510, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
/* … */
  __pyx_codeobj__417 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__46, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_is_filtered_comb_bank, 3510, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__417)) __PYX_ERR(0, 3510, __pyx_L1_error)
 3511:     """
 3512:     returns True if gen is a filtered_comb_bank.
 3513:     
 3514:     :param gen: gen
 3515:     :rtype: bool
 3516:     """
+3517:     return cclm.mus_is_filtered_comb_bank(gen._ptr)
  __pyx_r = mus_is_filtered_comb_bank(__pyx_v_gen->_ptr);
  goto __pyx_L0;
 3518: 
 3519: # ---------------- notch ---------------- #
+3520: cpdef mus_any make_notch(feedforward: Optional[float]=1.0,
static PyObject *__pyx_pw_8pysndlib_3clm_385make_notch(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_f_8pysndlib_3clm_make_notch(CYTHON_UNUSED int __pyx_skip_dispatch, struct __pyx_opt_args_8pysndlib_3clm_make_notch *__pyx_optional_args) {
  PyObject *__pyx_v_feedforward = ((PyObject *)__pyx_float_1_0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __PYX_XCLEAR_MEMVIEW(&__pyx_t_5, 1);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_AddTraceback("pysndlib.clm.make_notch", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __PYX_XCLEAR_MEMVIEW(&__pyx_v_initial_contents_view, 1);
  __Pyx_XDECREF((PyObject *)__pyx_v_gen);
  __Pyx_XDECREF(__pyx_v_initial_contents);
  __Pyx_XDECREF(__pyx_v_max_size);
  __Pyx_XDECREF(__pyx_v_interp_type);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_385make_notch(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_384make_notch, "\n    return a new notch filter (a delay line with a scaler on the feedforward) of size elements.\n    if the notch length will be changing at run-time, max-size sets its maximum length.\n    \n    :param feedforward: scaler on input\n    :param size: delay length \\in samples\n    :param initial_contents: delay line's initial values\n    :param initial_element: delay line's initial element\n    :param max_size: maximum delay size \\in case the delay changes\n    :param type: interpolation type\n    :return: comb gen\n    :rtype: mus_any\n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_385make_notch = {"make_notch", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_385make_notch, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_384make_notch};
static PyObject *__pyx_pw_8pysndlib_3clm_385make_notch(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_feedforward = 0;
  PyObject *__pyx_v_size = 0;
  PyObject *__pyx_v_initial_contents = 0;
  PyObject *__pyx_v_initial_element = 0;
  PyObject *__pyx_v_max_size = 0;
  PyObject *__pyx_v_interp_type = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("make_notch (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_feedforward,&__pyx_n_s_size,&__pyx_n_s_initial_contents,&__pyx_n_s_initial_element,&__pyx_n_s_max_size,&__pyx_n_s_interp_type,0};
    PyObject* values[6] = {0,0,0,0,0,0};
    values[0] = ((PyObject *)__pyx_float_1_0);
/* … */
  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_384make_notch(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_feedforward, PyObject *__pyx_v_size, PyObject *__pyx_v_initial_contents, PyObject *__pyx_v_initial_element, PyObject *__pyx_v_max_size, PyObject *__pyx_v_interp_type) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("make_notch", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2.__pyx_n = 6;
  __pyx_t_2.feedforward = __pyx_v_feedforward;
  __pyx_t_2.size = __pyx_v_size;
  __pyx_t_2.initial_contents = __pyx_v_initial_contents;
  __pyx_t_2.initial_element = __pyx_v_initial_element;
  __pyx_t_2.max_size = __pyx_v_max_size;
  __pyx_t_2.interp_type = __pyx_v_interp_type;
  __pyx_t_1 = ((PyObject *)__pyx_f_8pysndlib_3clm_make_notch(0, &__pyx_t_2)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3520, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pysndlib.clm.make_notch", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__418 = PyTuple_Pack(6, __pyx_n_s_feedforward, __pyx_n_s_size, __pyx_n_s_initial_contents, __pyx_n_s_initial_element, __pyx_n_s_max_size, __pyx_n_s_interp_type); if (unlikely(!__pyx_tuple__418)) __PYX_ERR(0, 3520, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__418);
  __Pyx_GIVEREF(__pyx_tuple__418);
/* … */
  __pyx_t_37 = PyTuple_New(6); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 3520, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  __Pyx_INCREF(__pyx_float_1_0);
  __Pyx_GIVEREF(__pyx_float_1_0);
  PyTuple_SET_ITEM(__pyx_t_37, 0, __pyx_float_1_0);
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  PyTuple_SET_ITEM(__pyx_t_37, 1, Py_None);
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  PyTuple_SET_ITEM(__pyx_t_37, 2, Py_None);
  __Pyx_INCREF(__pyx_float_0_0);
  __Pyx_GIVEREF(__pyx_float_0_0);
  PyTuple_SET_ITEM(__pyx_t_37, 3, __pyx_float_0_0);
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  PyTuple_SET_ITEM(__pyx_t_37, 4, Py_None);
  __Pyx_GIVEREF(__pyx_t_40);
  PyTuple_SET_ITEM(__pyx_t_37, 5, __pyx_t_40);
  __pyx_t_40 = 0;
  __pyx_t_40 = __Pyx_PyDict_NewPresized(4); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 3520, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  if (PyDict_SetItem(__pyx_t_40, __pyx_n_s_feedforward, __pyx_kp_s_Optional_float) < 0) __PYX_ERR(0, 3520, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_40, __pyx_n_s_size, __pyx_kp_s_Optional_int) < 0) __PYX_ERR(0, 3520, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_40, __pyx_n_s_initial_element, __pyx_kp_s_Optional_float) < 0) __PYX_ERR(0, 3520, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_40, __pyx_n_s_max_size, __pyx_kp_s_Optional_int) < 0) __PYX_ERR(0, 3520, __pyx_L1_error)
  __pyx_t_41 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_385make_notch, 0, __pyx_n_s_make_notch, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__419)); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 3520, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_41, __pyx_t_37);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_41, __pyx_t_40);
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_make_notch, __pyx_t_41) < 0) __PYX_ERR(0, 3520, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
  __pyx_codeobj__419 = (PyObject*)__Pyx_PyCode_New(6, 0, 0, 6, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__418, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_make_notch, 3520, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__419)) __PYX_ERR(0, 3520, __pyx_L1_error)
/* … */
struct __pyx_opt_args_8pysndlib_3clm_make_notch {
  int __pyx_n;
  PyObject *feedforward;
  PyObject *size;
  PyObject *initial_contents;
  PyObject *initial_element;
  PyObject *max_size;
  PyObject *interp_type;
};
+3521:                 size: Optional[int]=None,
  PyObject *__pyx_v_size = ((PyObject *)Py_None);
/* … */
    values[1] = ((PyObject *)Py_None);
+3522:                 initial_contents=None,
  PyObject *__pyx_v_initial_contents = ((PyObject *)Py_None);
  PyObject *__pyx_v_initial_element = ((PyObject *)__pyx_float_0_0);
/* … */
    values[2] = ((PyObject *)Py_None);
    values[3] = ((PyObject *)__pyx_float_0_0);
 3523:                 initial_element: Optional[float]=0.0,
+3524:                 max_size:Optional[int]=None,
  PyObject *__pyx_v_max_size = ((PyObject *)Py_None);
  PyObject *__pyx_v_interp_type = __pyx_k__37;
  __Pyx_memviewslice __pyx_v_initial_contents_view = { 0, 0, { 0 }, { 0 }, { 0 } };
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen = NULL;
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("make_notch", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_feedforward = __pyx_optional_args->feedforward;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_size = __pyx_optional_args->size;
        if (__pyx_optional_args->__pyx_n > 2) {
          __pyx_v_initial_contents = __pyx_optional_args->initial_contents;
          if (__pyx_optional_args->__pyx_n > 3) {
            __pyx_v_initial_element = __pyx_optional_args->initial_element;
            if (__pyx_optional_args->__pyx_n > 4) {
              __pyx_v_max_size = __pyx_optional_args->max_size;
              if (__pyx_optional_args->__pyx_n > 5) {
                __pyx_v_interp_type = __pyx_optional_args->interp_type;
              }
            }
          }
        }
      }
    }
  }
  __Pyx_INCREF(__pyx_v_initial_contents);
  __Pyx_INCREF(__pyx_v_max_size);
  __Pyx_INCREF(__pyx_v_interp_type);
/* … */
    values[4] = ((PyObject *)Py_None);
    values[5] = __pyx_k__37;
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  6: values[5] = __Pyx_Arg_FASTCALL(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = __Pyx_Arg_FASTCALL(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_feedforward);
          if (value) { values[0] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 3520, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_size);
          if (value) { values[1] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 3520, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_initial_contents);
          if (value) { values[2] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 3520, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_initial_element);
          if (value) { values[3] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 3520, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_max_size);
          if (value) { values[4] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 3520, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  5:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_interp_type);
          if (value) { values[5] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 3520, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "make_notch") < 0)) __PYX_ERR(0, 3520, __pyx_L3_error)
      }
    } else {
      switch (__pyx_nargs) {
        case  6: values[5] = __Pyx_Arg_FASTCALL(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = __Pyx_Arg_FASTCALL(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_feedforward = values[0];
    __pyx_v_size = values[1];
    __pyx_v_initial_contents = values[2];
    __pyx_v_initial_element = values[3];
    __pyx_v_max_size = values[4];
    __pyx_v_interp_type = values[5];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("make_notch", 0, 0, 6, __pyx_nargs); __PYX_ERR(0, 3520, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.make_notch", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pysndlib_3clm_384make_notch(__pyx_self, __pyx_v_feedforward, __pyx_v_size, __pyx_v_initial_contents, __pyx_v_initial_element, __pyx_v_max_size, __pyx_v_interp_type);
+3525:                 interp_type=Interp.NONE):
  __pyx_t_40 = __Pyx_Enum_Interp_to_py(__pyx_e_8pysndlib_3clm_NONE); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 3525, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  __pyx_k__37 = __pyx_t_40;
  __Pyx_GIVEREF(__pyx_t_40);
  __pyx_t_40 = 0;
/* … */
  __pyx_t_40 = __Pyx_Enum_Interp_to_py(__pyx_e_8pysndlib_3clm_NONE); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 3525, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
 3526: 
 3527:     """
 3528:     return a new notch filter (a delay line with a scaler on the feedforward) of size elements.
 3529:     if the notch length will be changing at run-time, max-size sets its maximum length.
 3530:     
 3531:     :param feedforward: scaler on input
 3532:     :param size: delay length \in samples
 3533:     :param initial_contents: delay line's initial values
 3534:     :param initial_element: delay line's initial element
 3535:     :param max_size: maximum delay size \in case the delay changes
 3536:     :param type: interpolation type
 3537:     :return: comb gen
 3538:     :rtype: mus_any
 3539:     """
 3540: 
+3541:     check_range('size', size, 0.0, None)
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_check_range); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3541, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  __pyx_t_4 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
      __pyx_t_4 = 1;
    }
  }
  {
    PyObject *__pyx_callargs[5] = {__pyx_t_3, __pyx_n_s_size, __pyx_v_size, __pyx_float_0_0, Py_None};
    __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 4+__pyx_t_4);
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3541, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 3542: 
+3543:     cdef double [:] initial_contents_view = None
  __pyx_t_5 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(Py_None, PyBUF_WRITABLE); if (unlikely(!__pyx_t_5.memview)) __PYX_ERR(0, 3543, __pyx_L1_error)
  __pyx_v_initial_contents_view = __pyx_t_5;
  __pyx_t_5.memview = NULL;
  __pyx_t_5.data = NULL;
 3544: 
+3545:     if not max_size:
  __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_v_max_size); if (unlikely((__pyx_t_6 < 0))) __PYX_ERR(0, 3545, __pyx_L1_error)
  __pyx_t_7 = (!__pyx_t_6);
  if (__pyx_t_7) {
/* … */
  }
+3546:         max_size = size
    __Pyx_INCREF(__pyx_v_size);
    __Pyx_DECREF_SET(__pyx_v_max_size, __pyx_v_size);
 3547: 
+3548:     if max_size != size and interp_type == Interp.NONE:
  __pyx_t_1 = PyObject_RichCompare(__pyx_v_max_size, __pyx_v_size, Py_NE); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3548, __pyx_L1_error)
  __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_6 < 0))) __PYX_ERR(0, 3548, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_6) {
  } else {
    __pyx_t_7 = __pyx_t_6;
    goto __pyx_L5_bool_binop_done;
  }
  __pyx_t_1 = __Pyx_Enum_Interp_to_py(__pyx_e_8pysndlib_3clm_NONE); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3548, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = PyObject_RichCompare(__pyx_v_interp_type, __pyx_t_1, Py_EQ); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3548, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_6 < 0))) __PYX_ERR(0, 3548, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_7 = __pyx_t_6;
  __pyx_L5_bool_binop_done:;
  if (__pyx_t_7) {
/* … */
  }
+3549:         interp_type = Interp.BEZIER #think this is correct from clm2xen.c
    __pyx_t_2 = __Pyx_Enum_Interp_to_py(__pyx_e_8pysndlib_3clm_BEZIER); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3549, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF_SET(__pyx_v_interp_type, __pyx_t_2);
    __pyx_t_2 = 0;
 3550: 
 3551: 
+3552:     if initial_contents is not None:
  __pyx_t_7 = (__pyx_v_initial_contents != Py_None);
  if (__pyx_t_7) {
/* … */
    goto __pyx_L7;
  }
+3553:         if isinstance(initial_contents, list):
    __pyx_t_7 = PyList_Check(__pyx_v_initial_contents); 
    if (__pyx_t_7) {
/* … */
    }
+3554:             initial_contents = np.array(initial_contents)
      __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3554, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_array); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3554, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_1 = NULL;
      __pyx_t_4 = 0;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
        __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_3);
        if (likely(__pyx_t_1)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
          __Pyx_INCREF(__pyx_t_1);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_3, function);
          __pyx_t_4 = 1;
        }
      }
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_1, __pyx_v_initial_contents};
        __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4);
        __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
        if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3554, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      }
      __Pyx_DECREF_SET(__pyx_v_initial_contents, __pyx_t_2);
      __pyx_t_2 = 0;
+3555:         check_ndim(initial_contents)
    __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_check_ndim); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3555, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_1 = NULL;
    __pyx_t_4 = 0;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
      __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_3);
      if (likely(__pyx_t_1)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
        __Pyx_INCREF(__pyx_t_1);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_3, function);
        __pyx_t_4 = 1;
      }
    }
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_1, __pyx_v_initial_contents};
      __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4);
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3555, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    }
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+3556:         initial_contents_view = initial_contents
    __pyx_t_5 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_initial_contents, PyBUF_WRITABLE); if (unlikely(!__pyx_t_5.memview)) __PYX_ERR(0, 3556, __pyx_L1_error)
    __PYX_XCLEAR_MEMVIEW(&__pyx_v_initial_contents_view, 1);
    __pyx_v_initial_contents_view = __pyx_t_5;
    __pyx_t_5.memview = NULL;
    __pyx_t_5.data = NULL;
 3557: 
+3558:     elif initial_element:
  __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_v_initial_element); if (unlikely((__pyx_t_7 < 0))) __PYX_ERR(0, 3558, __pyx_L1_error)
  if (__pyx_t_7) {
/* … */
  }
  __pyx_L7:;
+3559:         initial_contents = np.zeros(max_size, dtype=np.double)
    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3559, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_zeros); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3559, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3559, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_INCREF(__pyx_v_max_size);
    __Pyx_GIVEREF(__pyx_v_max_size);
    PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_max_size);
    __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3559, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 3559, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_double); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 3559, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_t_9) < 0) __PYX_ERR(0, 3559, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    __pyx_t_9 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_2, __pyx_t_1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 3559, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_DECREF_SET(__pyx_v_initial_contents, __pyx_t_9);
    __pyx_t_9 = 0;
+3560:         check_ndim(initial_contents)
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_check_ndim); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3560, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_2 = NULL;
    __pyx_t_4 = 0;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) {
      __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_1);
      if (likely(__pyx_t_2)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
        __Pyx_INCREF(__pyx_t_2);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_1, function);
        __pyx_t_4 = 1;
      }
    }
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_v_initial_contents};
      __pyx_t_9 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4);
      __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
      if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 3560, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    }
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+3561:         initial_contents.fill(initial_element)
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_initial_contents, __pyx_n_s_fill); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3561, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_2 = NULL;
    __pyx_t_4 = 0;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) {
      __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_1);
      if (likely(__pyx_t_2)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
        __Pyx_INCREF(__pyx_t_2);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_1, function);
        __pyx_t_4 = 1;
      }
    }
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_v_initial_element};
      __pyx_t_9 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4);
      __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
      if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 3561, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    }
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+3562:         initial_contents_view = initial_contents
    __pyx_t_5 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_initial_contents, PyBUF_WRITABLE); if (unlikely(!__pyx_t_5.memview)) __PYX_ERR(0, 3562, __pyx_L1_error)
    __PYX_XCLEAR_MEMVIEW(&__pyx_v_initial_contents_view, 1);
    __pyx_v_initial_contents_view = __pyx_t_5;
    __pyx_t_5.memview = NULL;
    __pyx_t_5.data = NULL;
 3563: 
+3564:     if initial_contents_view is not None:
  __pyx_t_7 = (((PyObject *) __pyx_v_initial_contents_view.memview) != Py_None);
  if (__pyx_t_7) {
/* … */
    goto __pyx_L9;
  }
+3565:         gen = mus_any.from_ptr(cclm.mus_make_notch(feedforward, size, &initial_contents_view[0], max_size, interp_type))
    __pyx_t_10 = __pyx_PyFloat_AsDouble(__pyx_v_feedforward); if (unlikely((__pyx_t_10 == ((mus_float_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 3565, __pyx_L1_error)
    __pyx_t_4 = __Pyx_PyInt_As_int(__pyx_v_size); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 3565, __pyx_L1_error)
    __pyx_t_11 = 0;
    __pyx_t_12 = -1;
    if (__pyx_t_11 < 0) {
      __pyx_t_11 += __pyx_v_initial_contents_view.shape[0];
      if (unlikely(__pyx_t_11 < 0)) __pyx_t_12 = 0;
    } else if (unlikely(__pyx_t_11 >= __pyx_v_initial_contents_view.shape[0])) __pyx_t_12 = 0;
    if (unlikely(__pyx_t_12 != -1)) {
      __Pyx_RaiseBufferIndexError(__pyx_t_12);
      __PYX_ERR(0, 3565, __pyx_L1_error)
    }
    __pyx_t_12 = __Pyx_PyInt_As_int(__pyx_v_max_size); if (unlikely((__pyx_t_12 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 3565, __pyx_L1_error)
    __pyx_t_13 = ((mus_interp_t)__Pyx_PyInt_As_mus_interp_t(__pyx_v_interp_type)); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 3565, __pyx_L1_error)
    __pyx_t_9 = ((PyObject *)__pyx_vtabptr_8pysndlib_3clm_mus_any->from_ptr(mus_make_notch(__pyx_t_10, __pyx_t_4, (&(*((double *) ( /* dim=0 */ (__pyx_v_initial_contents_view.data + __pyx_t_11 * __pyx_v_initial_contents_view.strides[0]) )))), __pyx_t_12, __pyx_t_13), NULL)); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 3565, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __pyx_v_gen = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)__pyx_t_9);
    __pyx_t_9 = 0;
 3566:     else:
+3567:         gen = mus_any.from_ptr(cclm.mus_make_notch(feedforward, size, NULL, max_size, interp_type))
  /*else*/ {
    __pyx_t_10 = __pyx_PyFloat_AsDouble(__pyx_v_feedforward); if (unlikely((__pyx_t_10 == ((mus_float_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 3567, __pyx_L1_error)
    __pyx_t_12 = __Pyx_PyInt_As_int(__pyx_v_size); if (unlikely((__pyx_t_12 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 3567, __pyx_L1_error)
    __pyx_t_4 = __Pyx_PyInt_As_int(__pyx_v_max_size); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 3567, __pyx_L1_error)
    __pyx_t_13 = ((mus_interp_t)__Pyx_PyInt_As_mus_interp_t(__pyx_v_interp_type)); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 3567, __pyx_L1_error)
    __pyx_t_9 = ((PyObject *)__pyx_vtabptr_8pysndlib_3clm_mus_any->from_ptr(mus_make_notch(__pyx_t_10, __pyx_t_12, NULL, __pyx_t_4, __pyx_t_13), NULL)); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 3567, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __pyx_v_gen = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)__pyx_t_9);
    __pyx_t_9 = 0;
  }
  __pyx_L9:;
+3568:     gen.cache_append(initial_contents)
  __pyx_t_9 = ((struct __pyx_vtabstruct_8pysndlib_3clm_mus_any *)__pyx_v_gen->__pyx_vtab)->cache_append(__pyx_v_gen, __pyx_v_initial_contents, 0); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 3568, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+3569:     return gen
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __Pyx_INCREF((PyObject *)__pyx_v_gen);
  __pyx_r = __pyx_v_gen;
  goto __pyx_L0;
 3570: 
+3571: cpdef cython.double notch(gen: mus_any, insig: float, pm: Optional[float]=None):
static PyObject *__pyx_pw_8pysndlib_3clm_387notch(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static double __pyx_f_8pysndlib_3clm_notch(struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen, double __pyx_v_insig, CYTHON_UNUSED int __pyx_skip_dispatch, struct __pyx_opt_args_8pysndlib_3clm_notch *__pyx_optional_args) {
  PyObject *__pyx_v_pm = ((PyObject *)Py_None);
  double __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("notch", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_pm = __pyx_optional_args->pm;
    }
  }
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("pysndlib.clm.notch", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_387notch(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_386notch, "\n    notch filter val, pm changes the delay length.\n        \n    :param gen: notch gen\n    :param insig: input value\n    :param pm: change \\in delay length size. can be + or -\n    :rtype: float\n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_387notch = {"notch", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_387notch, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_386notch};
static PyObject *__pyx_pw_8pysndlib_3clm_387notch(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen = 0;
  double __pyx_v_insig;
  PyObject *__pyx_v_pm = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("notch (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_gen,&__pyx_n_s_insig,&__pyx_n_s_pm,0};
    PyObject* values[3] = {0,0,0};
    values[2] = ((PyObject *)Py_None);
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_gen)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 3571, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_insig)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 3571, __pyx_L3_error)
        else {
          __Pyx_RaiseArgtupleInvalid("notch", 0, 2, 3, 1); __PYX_ERR(0, 3571, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_pm);
          if (value) { values[2] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 3571, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "notch") < 0)) __PYX_ERR(0, 3571, __pyx_L3_error)
      }
    } else {
      switch (__pyx_nargs) {
        case  3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_gen = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)values[0]);
    __pyx_v_insig = __pyx_PyFloat_AsDouble(values[1]); if (unlikely((__pyx_v_insig == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 3571, __pyx_L3_error)
    __pyx_v_pm = values[2];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("notch", 0, 2, 3, __pyx_nargs); __PYX_ERR(0, 3571, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.notch", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_gen), __pyx_ptype_8pysndlib_3clm_mus_any, 0, "gen", 0))) __PYX_ERR(0, 3571, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pysndlib_3clm_386notch(__pyx_self, __pyx_v_gen, __pyx_v_insig, __pyx_v_pm);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_386notch(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen, double __pyx_v_insig, PyObject *__pyx_v_pm) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("notch", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2.__pyx_n = 1;
  __pyx_t_2.pm = __pyx_v_pm;
  __pyx_t_1 = __pyx_f_8pysndlib_3clm_notch(__pyx_v_gen, __pyx_v_insig, 0, &__pyx_t_2); if (unlikely(__pyx_t_1 == ((double)-1) && PyErr_Occurred())) __PYX_ERR(0, 3571, __pyx_L1_error)
  __pyx_t_3 = PyFloat_FromDouble(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3571, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_r = __pyx_t_3;
  __pyx_t_3 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("pysndlib.clm.notch", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_41 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 3571, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  if (PyDict_SetItem(__pyx_t_41, __pyx_n_s_gen, __pyx_n_s_mus_any) < 0) __PYX_ERR(0, 3571, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_41, __pyx_n_s_insig, __pyx_n_s_float) < 0) __PYX_ERR(0, 3571, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_41, __pyx_n_s_pm, __pyx_kp_s_Optional_float) < 0) __PYX_ERR(0, 3571, __pyx_L1_error)
  __pyx_t_40 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_387notch, 0, __pyx_n_s_notch, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__420)); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 3571, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_40, __pyx_tuple__258);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_40, __pyx_t_41);
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_notch, __pyx_t_40) < 0) __PYX_ERR(0, 3571, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
/* … */
  __pyx_codeobj__420 = (PyObject*)__Pyx_PyCode_New(3, 0, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__395, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_notch, 3571, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__420)) __PYX_ERR(0, 3571, __pyx_L1_error)
/* … */
struct __pyx_opt_args_8pysndlib_3clm_notch {
  int __pyx_n;
  PyObject *pm;
};
 3572:     """
 3573:     notch filter val, pm changes the delay length.
 3574:         
 3575:     :param gen: notch gen
 3576:     :param insig: input value
 3577:     :param pm: change \in delay length size. can be + or -
 3578:     :rtype: float
 3579:     """
+3580:     if pm:
  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_pm); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 3580, __pyx_L1_error)
  if (__pyx_t_1) {
/* … */
  }
+3581:         return cclm.mus_notch(gen._ptr, input, pm)
    __pyx_t_2 = __pyx_PyFloat_AsDouble(__pyx_builtin_input); if (unlikely((__pyx_t_2 == ((mus_float_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 3581, __pyx_L1_error)
    __pyx_t_3 = __pyx_PyFloat_AsDouble(__pyx_v_pm); if (unlikely((__pyx_t_3 == ((mus_float_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 3581, __pyx_L1_error)
    __pyx_r = mus_notch(__pyx_v_gen->_ptr, __pyx_t_2, __pyx_t_3);
    goto __pyx_L0;
 3582:     else:
+3583:         return cclm.mus_notch_unmodulated(gen._ptr, insig)
  /*else*/ {
    __pyx_r = mus_notch_unmodulated(__pyx_v_gen->_ptr, __pyx_v_insig);
    goto __pyx_L0;
  }
 3584: 
+3585: cpdef bint is_notch(gen: mus_any):
static PyObject *__pyx_pw_8pysndlib_3clm_389is_notch(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static int __pyx_f_8pysndlib_3clm_is_notch(struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen, CYTHON_UNUSED int __pyx_skip_dispatch) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_notch", 0);
/* … */
  /* function exit code */
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_389is_notch(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_388is_notch, "\n    returns True if gen is a notch.\n    \n    :param gen: gen\n    :rtype: bool\n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_389is_notch = {"is_notch", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_389is_notch, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_388is_notch};
static PyObject *__pyx_pw_8pysndlib_3clm_389is_notch(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_notch (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_gen,0};
    PyObject* values[1] = {0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_gen)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 3585, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "is_notch") < 0)) __PYX_ERR(0, 3585, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
    }
    __pyx_v_gen = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)values[0]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("is_notch", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 3585, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.is_notch", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_gen), __pyx_ptype_8pysndlib_3clm_mus_any, 0, "gen", 0))) __PYX_ERR(0, 3585, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pysndlib_3clm_388is_notch(__pyx_self, __pyx_v_gen);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_388is_notch(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_notch", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_8pysndlib_3clm_is_notch(__pyx_v_gen, 0); if (unlikely(__pyx_t_1 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 3585, __pyx_L1_error)
  __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3585, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pysndlib.clm.is_notch", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_40 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 3585, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  if (PyDict_SetItem(__pyx_t_40, __pyx_n_s_gen, __pyx_n_s_mus_any) < 0) __PYX_ERR(0, 3585, __pyx_L1_error)
  __pyx_t_41 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_389is_notch, 0, __pyx_n_s_is_notch, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__421)); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 3585, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_41, __pyx_t_40);
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_is_notch, __pyx_t_41) < 0) __PYX_ERR(0, 3585, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
/* … */
  __pyx_codeobj__421 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__46, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_is_notch, 3585, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__421)) __PYX_ERR(0, 3585, __pyx_L1_error)
 3586:     """
 3587:     returns True if gen is a notch.
 3588:     
 3589:     :param gen: gen
 3590:     :rtype: bool
 3591:     """
+3592:     return cclm.mus_is_notch(gen._ptr)
  __pyx_r = mus_is_notch(__pyx_v_gen->_ptr);
  goto __pyx_L0;
 3593: 
 3594: 
 3595: # ---------------- all-pass ---------------- #
+3596: cpdef mus_any make_all_pass(feedback: float, feedforward: float, size: int, initial_contents: Optional[np.ndarray] = None, initial_element: Optional[float] = 0.0,  max_size:Optional[int] = None, interp_type: Optional[Interp] = Interp.NONE):
static PyObject *__pyx_pw_8pysndlib_3clm_391make_all_pass(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_f_8pysndlib_3clm_make_all_pass(double __pyx_v_feedback, double __pyx_v_feedforward, PyObject *__pyx_v_size, CYTHON_UNUSED int __pyx_skip_dispatch, struct __pyx_opt_args_8pysndlib_3clm_make_all_pass *__pyx_optional_args) {
  PyObject *__pyx_v_initial_contents = ((PyObject *)Py_None);
  PyObject *__pyx_v_initial_element = ((PyObject *)__pyx_float_0_0);
  PyObject *__pyx_v_max_size = ((PyObject *)Py_None);
  PyObject *__pyx_v_interp_type = __pyx_k__38;
  __Pyx_memviewslice __pyx_v_initial_contents_view = { 0, 0, { 0 }, { 0 }, { 0 } };
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen = NULL;
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("make_all_pass", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_initial_contents = __pyx_optional_args->initial_contents;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_initial_element = __pyx_optional_args->initial_element;
        if (__pyx_optional_args->__pyx_n > 2) {
          __pyx_v_max_size = __pyx_optional_args->max_size;
          if (__pyx_optional_args->__pyx_n > 3) {
            __pyx_v_interp_type = __pyx_optional_args->interp_type;
          }
        }
      }
    }
  }
  __Pyx_INCREF(__pyx_v_initial_contents);
  __Pyx_INCREF(__pyx_v_max_size);
  __Pyx_INCREF(__pyx_v_interp_type);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __PYX_XCLEAR_MEMVIEW(&__pyx_t_5, 1);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_AddTraceback("pysndlib.clm.make_all_pass", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __PYX_XCLEAR_MEMVIEW(&__pyx_v_initial_contents_view, 1);
  __Pyx_XDECREF((PyObject *)__pyx_v_gen);
  __Pyx_XDECREF(__pyx_v_initial_contents);
  __Pyx_XDECREF(__pyx_v_max_size);
  __Pyx_XDECREF(__pyx_v_interp_type);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_391make_all_pass(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_390make_all_pass, "\n    return a new allpass filter (a delay line with a scalers on both the feedback and the feedforward).\n    if length will be changing at run-time, max-size sets its maximum length.\n    \n    :param feedback: scaler on feedback\n    :param feedforward: scaler on input\n    :param size: length \\in samples of the delay line\n    :param initial_contents: delay line's initial values\n    :param initial_element: delay line's initial element\n    :param max_size: maximum delay size \\in case the delay changes\n    :param interp_type: interpolation type\n    :return: a new allpass filter\n    :rtype: mus_any\n     \n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_391make_all_pass = {"make_all_pass", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_391make_all_pass, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_390make_all_pass};
static PyObject *__pyx_pw_8pysndlib_3clm_391make_all_pass(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  double __pyx_v_feedback;
  double __pyx_v_feedforward;
  PyObject *__pyx_v_size = 0;
  PyObject *__pyx_v_initial_contents = 0;
  PyObject *__pyx_v_initial_element = 0;
  PyObject *__pyx_v_max_size = 0;
  PyObject *__pyx_v_interp_type = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("make_all_pass (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_feedback,&__pyx_n_s_feedforward,&__pyx_n_s_size,&__pyx_n_s_initial_contents,&__pyx_n_s_initial_element,&__pyx_n_s_max_size,&__pyx_n_s_interp_type,0};
    PyObject* values[7] = {0,0,0,0,0,0,0};
    values[3] = ((PyObject *)Py_None);
    values[4] = ((PyObject *)__pyx_float_0_0);
    values[5] = ((PyObject *)Py_None);
    values[6] = __pyx_k__38;
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  7: values[6] = __Pyx_Arg_FASTCALL(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = __Pyx_Arg_FASTCALL(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = __Pyx_Arg_FASTCALL(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_feedback)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 3596, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_feedforward)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 3596, __pyx_L3_error)
        else {
          __Pyx_RaiseArgtupleInvalid("make_all_pass", 0, 3, 7, 1); __PYX_ERR(0, 3596, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_size)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 3596, __pyx_L3_error)
        else {
          __Pyx_RaiseArgtupleInvalid("make_all_pass", 0, 3, 7, 2); __PYX_ERR(0, 3596, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_initial_contents);
          if (value) { values[3] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 3596, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_initial_element);
          if (value) { values[4] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 3596, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  5:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_max_size);
          if (value) { values[5] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 3596, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  6:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_interp_type);
          if (value) { values[6] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 3596, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "make_all_pass") < 0)) __PYX_ERR(0, 3596, __pyx_L3_error)
      }
    } else {
      switch (__pyx_nargs) {
        case  7: values[6] = __Pyx_Arg_FASTCALL(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = __Pyx_Arg_FASTCALL(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = __Pyx_Arg_FASTCALL(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
        values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_feedback = __pyx_PyFloat_AsDouble(values[0]); if (unlikely((__pyx_v_feedback == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 3596, __pyx_L3_error)
    __pyx_v_feedforward = __pyx_PyFloat_AsDouble(values[1]); if (unlikely((__pyx_v_feedforward == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 3596, __pyx_L3_error)
    __pyx_v_size = ((PyObject*)values[2]);
    __pyx_v_initial_contents = values[3];
    __pyx_v_initial_element = values[4];
    __pyx_v_max_size = values[5];
    __pyx_v_interp_type = values[6];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("make_all_pass", 0, 3, 7, __pyx_nargs); __PYX_ERR(0, 3596, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.make_all_pass", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_size), (&PyInt_Type), 0, "size", 1))) __PYX_ERR(0, 3596, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pysndlib_3clm_390make_all_pass(__pyx_self, __pyx_v_feedback, __pyx_v_feedforward, __pyx_v_size, __pyx_v_initial_contents, __pyx_v_initial_element, __pyx_v_max_size, __pyx_v_interp_type);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_390make_all_pass(CYTHON_UNUSED PyObject *__pyx_self, double __pyx_v_feedback, double __pyx_v_feedforward, PyObject *__pyx_v_size, PyObject *__pyx_v_initial_contents, PyObject *__pyx_v_initial_element, PyObject *__pyx_v_max_size, PyObject *__pyx_v_interp_type) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("make_all_pass", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2.__pyx_n = 4;
  __pyx_t_2.initial_contents = __pyx_v_initial_contents;
  __pyx_t_2.initial_element = __pyx_v_initial_element;
  __pyx_t_2.max_size = __pyx_v_max_size;
  __pyx_t_2.interp_type = __pyx_v_interp_type;
  __pyx_t_1 = ((PyObject *)__pyx_f_8pysndlib_3clm_make_all_pass(__pyx_v_feedback, __pyx_v_feedforward, __pyx_v_size, 0, &__pyx_t_2)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3596, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pysndlib.clm.make_all_pass", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_41 = __Pyx_Enum_Interp_to_py(__pyx_e_8pysndlib_3clm_NONE); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 3596, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  __pyx_k__38 = __pyx_t_41;
  __Pyx_GIVEREF(__pyx_t_41);
  __pyx_t_41 = 0;
/* … */
  __pyx_tuple__422 = PyTuple_Pack(7, __pyx_n_s_feedback, __pyx_n_s_feedforward, __pyx_n_s_size, __pyx_n_s_initial_contents, __pyx_n_s_initial_element, __pyx_n_s_max_size, __pyx_n_s_interp_type); if (unlikely(!__pyx_tuple__422)) __PYX_ERR(0, 3596, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__422);
  __Pyx_GIVEREF(__pyx_tuple__422);
  __pyx_t_41 = __Pyx_Enum_Interp_to_py(__pyx_e_8pysndlib_3clm_NONE); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 3596, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  __pyx_t_40 = PyTuple_New(4); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 3596, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  PyTuple_SET_ITEM(__pyx_t_40, 0, Py_None);
  __Pyx_INCREF(__pyx_float_0_0);
  __Pyx_GIVEREF(__pyx_float_0_0);
  PyTuple_SET_ITEM(__pyx_t_40, 1, __pyx_float_0_0);
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  PyTuple_SET_ITEM(__pyx_t_40, 2, Py_None);
  __Pyx_GIVEREF(__pyx_t_41);
  PyTuple_SET_ITEM(__pyx_t_40, 3, __pyx_t_41);
  __pyx_t_41 = 0;
  __pyx_t_41 = __Pyx_PyDict_NewPresized(7); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 3596, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  if (PyDict_SetItem(__pyx_t_41, __pyx_n_s_feedback, __pyx_n_s_float) < 0) __PYX_ERR(0, 3596, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_41, __pyx_n_s_feedforward, __pyx_n_s_float) < 0) __PYX_ERR(0, 3596, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_41, __pyx_n_s_size, __pyx_n_s_int_2) < 0) __PYX_ERR(0, 3596, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_41, __pyx_n_s_initial_contents, __pyx_kp_s_Optional_np_ndarray) < 0) __PYX_ERR(0, 3596, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_41, __pyx_n_s_initial_element, __pyx_kp_s_Optional_float) < 0) __PYX_ERR(0, 3596, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_41, __pyx_n_s_max_size, __pyx_kp_s_Optional_int) < 0) __PYX_ERR(0, 3596, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_41, __pyx_n_s_interp_type, __pyx_kp_s_Optional_Interp) < 0) __PYX_ERR(0, 3596, __pyx_L1_error)
  __pyx_t_37 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_391make_all_pass, 0, __pyx_n_s_make_all_pass, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__423)); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 3596, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_37, __pyx_t_40);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_37, __pyx_t_41);
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_make_all_pass, __pyx_t_37) < 0) __PYX_ERR(0, 3596, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
  __pyx_codeobj__423 = (PyObject*)__Pyx_PyCode_New(7, 0, 0, 7, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__422, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_make_all_pass, 3596, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__423)) __PYX_ERR(0, 3596, __pyx_L1_error)
/* … */
struct __pyx_opt_args_8pysndlib_3clm_make_all_pass {
  int __pyx_n;
  PyObject *initial_contents;
  PyObject *initial_element;
  PyObject *max_size;
  PyObject *interp_type;
};
 3597: 
 3598:     """
 3599:     return a new allpass filter (a delay line with a scalers on both the feedback and the feedforward).
 3600:     if length will be changing at run-time, max-size sets its maximum length.
 3601:     
 3602:     :param feedback: scaler on feedback
 3603:     :param feedforward: scaler on input
 3604:     :param size: length \in samples of the delay line
 3605:     :param initial_contents: delay line's initial values
 3606:     :param initial_element: delay line's initial element
 3607:     :param max_size: maximum delay size \in case the delay changes
 3608:     :param interp_type: interpolation type
 3609:     :return: a new allpass filter
 3610:     :rtype: mus_any
 3611:      
 3612:     """
 3613: 
+3614:     check_range('size', size, 0.0, None)
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_check_range); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3614, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  __pyx_t_4 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
      __pyx_t_4 = 1;
    }
  }
  {
    PyObject *__pyx_callargs[5] = {__pyx_t_3, __pyx_n_s_size, __pyx_v_size, __pyx_float_0_0, Py_None};
    __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 4+__pyx_t_4);
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3614, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 3615: 
+3616:     cdef double [:] initial_contents_view = None
  __pyx_t_5 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(Py_None, PyBUF_WRITABLE); if (unlikely(!__pyx_t_5.memview)) __PYX_ERR(0, 3616, __pyx_L1_error)
  __pyx_v_initial_contents_view = __pyx_t_5;
  __pyx_t_5.memview = NULL;
  __pyx_t_5.data = NULL;
 3617: 
+3618:     if not max_size:
  __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_v_max_size); if (unlikely((__pyx_t_6 < 0))) __PYX_ERR(0, 3618, __pyx_L1_error)
  __pyx_t_7 = (!__pyx_t_6);
  if (__pyx_t_7) {
/* … */
  }
+3619:         max_size = size
    __Pyx_INCREF(__pyx_v_size);
    __Pyx_DECREF_SET(__pyx_v_max_size, __pyx_v_size);
 3620: 
+3621:     if max_size != size and interp_type == Interp.NONE:
  __pyx_t_1 = PyObject_RichCompare(__pyx_v_max_size, __pyx_v_size, Py_NE); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3621, __pyx_L1_error)
  __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_6 < 0))) __PYX_ERR(0, 3621, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_6) {
  } else {
    __pyx_t_7 = __pyx_t_6;
    goto __pyx_L5_bool_binop_done;
  }
  __pyx_t_1 = __Pyx_Enum_Interp_to_py(__pyx_e_8pysndlib_3clm_NONE); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3621, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = PyObject_RichCompare(__pyx_v_interp_type, __pyx_t_1, Py_EQ); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3621, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_6 < 0))) __PYX_ERR(0, 3621, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_7 = __pyx_t_6;
  __pyx_L5_bool_binop_done:;
  if (__pyx_t_7) {
/* … */
  }
+3622:         interp_type = Interp.HERMITE #think this is correct from clm2xen.c
    __pyx_t_2 = __Pyx_Enum_Interp_to_py(__pyx_e_8pysndlib_3clm_HERMITE); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3622, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF_SET(__pyx_v_interp_type, __pyx_t_2);
    __pyx_t_2 = 0;
 3623: 
 3624: 
+3625:     if initial_contents is not None:
  __pyx_t_7 = (__pyx_v_initial_contents != Py_None);
  if (__pyx_t_7) {
/* … */
    goto __pyx_L7;
  }
+3626:         if isinstance(initial_contents, list):
    __pyx_t_7 = PyList_Check(__pyx_v_initial_contents); 
    if (__pyx_t_7) {
/* … */
    }
+3627:             initial_contents = np.array(initial_contents)
      __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3627, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_array); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3627, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_1 = NULL;
      __pyx_t_4 = 0;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
        __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_3);
        if (likely(__pyx_t_1)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
          __Pyx_INCREF(__pyx_t_1);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_3, function);
          __pyx_t_4 = 1;
        }
      }
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_1, __pyx_v_initial_contents};
        __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4);
        __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
        if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3627, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      }
      __Pyx_DECREF_SET(__pyx_v_initial_contents, __pyx_t_2);
      __pyx_t_2 = 0;
+3628:         check_ndim(initial_contents)
    __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_check_ndim); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3628, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_1 = NULL;
    __pyx_t_4 = 0;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
      __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_3);
      if (likely(__pyx_t_1)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
        __Pyx_INCREF(__pyx_t_1);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_3, function);
        __pyx_t_4 = 1;
      }
    }
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_1, __pyx_v_initial_contents};
      __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4);
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3628, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    }
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+3629:         initial_contents_view = initial_contents
    __pyx_t_5 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_initial_contents, PyBUF_WRITABLE); if (unlikely(!__pyx_t_5.memview)) __PYX_ERR(0, 3629, __pyx_L1_error)
    __PYX_XCLEAR_MEMVIEW(&__pyx_v_initial_contents_view, 1);
    __pyx_v_initial_contents_view = __pyx_t_5;
    __pyx_t_5.memview = NULL;
    __pyx_t_5.data = NULL;
 3630: 
+3631:     elif initial_element:
  __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_v_initial_element); if (unlikely((__pyx_t_7 < 0))) __PYX_ERR(0, 3631, __pyx_L1_error)
  if (__pyx_t_7) {
/* … */
  }
  __pyx_L7:;
+3632:         initial_contents = np.zeros(max_size, dtype=np.double)
    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3632, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_zeros); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3632, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3632, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_INCREF(__pyx_v_max_size);
    __Pyx_GIVEREF(__pyx_v_max_size);
    PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_max_size);
    __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3632, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 3632, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_double); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 3632, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_t_9) < 0) __PYX_ERR(0, 3632, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    __pyx_t_9 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_2, __pyx_t_1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 3632, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_DECREF_SET(__pyx_v_initial_contents, __pyx_t_9);
    __pyx_t_9 = 0;
+3633:         check_ndim(initial_contents)
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_check_ndim); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3633, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_2 = NULL;
    __pyx_t_4 = 0;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) {
      __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_1);
      if (likely(__pyx_t_2)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
        __Pyx_INCREF(__pyx_t_2);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_1, function);
        __pyx_t_4 = 1;
      }
    }
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_v_initial_contents};
      __pyx_t_9 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4);
      __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
      if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 3633, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    }
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+3634:         initial_contents.fill(initial_element)
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_initial_contents, __pyx_n_s_fill); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3634, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_2 = NULL;
    __pyx_t_4 = 0;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) {
      __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_1);
      if (likely(__pyx_t_2)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
        __Pyx_INCREF(__pyx_t_2);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_1, function);
        __pyx_t_4 = 1;
      }
    }
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_v_initial_element};
      __pyx_t_9 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4);
      __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
      if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 3634, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    }
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+3635:         initial_contents_view = initial_contents
    __pyx_t_5 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_initial_contents, PyBUF_WRITABLE); if (unlikely(!__pyx_t_5.memview)) __PYX_ERR(0, 3635, __pyx_L1_error)
    __PYX_XCLEAR_MEMVIEW(&__pyx_v_initial_contents_view, 1);
    __pyx_v_initial_contents_view = __pyx_t_5;
    __pyx_t_5.memview = NULL;
    __pyx_t_5.data = NULL;
 3636: 
+3637:     if initial_contents_view is not None:
  __pyx_t_7 = (((PyObject *) __pyx_v_initial_contents_view.memview) != Py_None);
  if (__pyx_t_7) {
/* … */
    goto __pyx_L9;
  }
+3638:         gen = mus_any.from_ptr(cclm.mus_make_all_pass(feedback,feedforward, size, &initial_contents_view[0], max_size, interp_type))
    __pyx_t_4 = __Pyx_PyInt_As_int(__pyx_v_size); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 3638, __pyx_L1_error)
    __pyx_t_10 = 0;
    __pyx_t_11 = -1;
    if (__pyx_t_10 < 0) {
      __pyx_t_10 += __pyx_v_initial_contents_view.shape[0];
      if (unlikely(__pyx_t_10 < 0)) __pyx_t_11 = 0;
    } else if (unlikely(__pyx_t_10 >= __pyx_v_initial_contents_view.shape[0])) __pyx_t_11 = 0;
    if (unlikely(__pyx_t_11 != -1)) {
      __Pyx_RaiseBufferIndexError(__pyx_t_11);
      __PYX_ERR(0, 3638, __pyx_L1_error)
    }
    __pyx_t_11 = __Pyx_PyInt_As_int(__pyx_v_max_size); if (unlikely((__pyx_t_11 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 3638, __pyx_L1_error)
    __pyx_t_12 = ((mus_interp_t)__Pyx_PyInt_As_mus_interp_t(__pyx_v_interp_type)); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 3638, __pyx_L1_error)
    __pyx_t_9 = ((PyObject *)__pyx_vtabptr_8pysndlib_3clm_mus_any->from_ptr(mus_make_all_pass(__pyx_v_feedback, __pyx_v_feedforward, __pyx_t_4, (&(*((double *) ( /* dim=0 */ (__pyx_v_initial_contents_view.data + __pyx_t_10 * __pyx_v_initial_contents_view.strides[0]) )))), __pyx_t_11, __pyx_t_12), NULL)); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 3638, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __pyx_v_gen = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)__pyx_t_9);
    __pyx_t_9 = 0;
 3639:     else:
+3640:         gen = mus_any.from_ptr(cclm.mus_make_all_pass(feedback,feedforward, size,NULL, max_size, interp_type))
  /*else*/ {
    __pyx_t_11 = __Pyx_PyInt_As_int(__pyx_v_size); if (unlikely((__pyx_t_11 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 3640, __pyx_L1_error)
    __pyx_t_4 = __Pyx_PyInt_As_int(__pyx_v_max_size); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 3640, __pyx_L1_error)
    __pyx_t_12 = ((mus_interp_t)__Pyx_PyInt_As_mus_interp_t(__pyx_v_interp_type)); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 3640, __pyx_L1_error)
    __pyx_t_9 = ((PyObject *)__pyx_vtabptr_8pysndlib_3clm_mus_any->from_ptr(mus_make_all_pass(__pyx_v_feedback, __pyx_v_feedforward, __pyx_t_11, NULL, __pyx_t_4, __pyx_t_12), NULL)); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 3640, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __pyx_v_gen = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)__pyx_t_9);
    __pyx_t_9 = 0;
  }
  __pyx_L9:;
+3641:     gen.cache_append(initial_contents)
  __pyx_t_9 = ((struct __pyx_vtabstruct_8pysndlib_3clm_mus_any *)__pyx_v_gen->__pyx_vtab)->cache_append(__pyx_v_gen, __pyx_v_initial_contents, 0); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 3641, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+3642:     return gen
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __Pyx_INCREF((PyObject *)__pyx_v_gen);
  __pyx_r = __pyx_v_gen;
  goto __pyx_L0;
 3643: 
+3644: cpdef cython.double all_pass(gen: mus_any, insig: float, pm: Optional[float]=None):
static PyObject *__pyx_pw_8pysndlib_3clm_393all_pass(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static double __pyx_f_8pysndlib_3clm_all_pass(struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen, double __pyx_v_insig, CYTHON_UNUSED int __pyx_skip_dispatch, struct __pyx_opt_args_8pysndlib_3clm_all_pass *__pyx_optional_args) {
  PyObject *__pyx_v_pm = ((PyObject *)Py_None);
  double __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("all_pass", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_pm = __pyx_optional_args->pm;
    }
  }
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("pysndlib.clm.all_pass", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_393all_pass(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_392all_pass, "\n    all-pass filter insig value, pm changes the delay length.\n    \n    :param gen: all_pass gen\n    :param insig: input value\n    :param pm: change \\in delay length size. can be + or -\n    :rtype: float\n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_393all_pass = {"all_pass", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_393all_pass, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_392all_pass};
static PyObject *__pyx_pw_8pysndlib_3clm_393all_pass(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen = 0;
  double __pyx_v_insig;
  PyObject *__pyx_v_pm = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("all_pass (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_gen,&__pyx_n_s_insig,&__pyx_n_s_pm,0};
    PyObject* values[3] = {0,0,0};
    values[2] = ((PyObject *)Py_None);
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_gen)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 3644, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_insig)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 3644, __pyx_L3_error)
        else {
          __Pyx_RaiseArgtupleInvalid("all_pass", 0, 2, 3, 1); __PYX_ERR(0, 3644, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_pm);
          if (value) { values[2] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 3644, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "all_pass") < 0)) __PYX_ERR(0, 3644, __pyx_L3_error)
      }
    } else {
      switch (__pyx_nargs) {
        case  3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_gen = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)values[0]);
    __pyx_v_insig = __pyx_PyFloat_AsDouble(values[1]); if (unlikely((__pyx_v_insig == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 3644, __pyx_L3_error)
    __pyx_v_pm = values[2];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("all_pass", 0, 2, 3, __pyx_nargs); __PYX_ERR(0, 3644, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.all_pass", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_gen), __pyx_ptype_8pysndlib_3clm_mus_any, 0, "gen", 0))) __PYX_ERR(0, 3644, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pysndlib_3clm_392all_pass(__pyx_self, __pyx_v_gen, __pyx_v_insig, __pyx_v_pm);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_392all_pass(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen, double __pyx_v_insig, PyObject *__pyx_v_pm) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("all_pass", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2.__pyx_n = 1;
  __pyx_t_2.pm = __pyx_v_pm;
  __pyx_t_1 = __pyx_f_8pysndlib_3clm_all_pass(__pyx_v_gen, __pyx_v_insig, 0, &__pyx_t_2); if (unlikely(__pyx_t_1 == ((double)-1) && PyErr_Occurred())) __PYX_ERR(0, 3644, __pyx_L1_error)
  __pyx_t_3 = PyFloat_FromDouble(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3644, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_r = __pyx_t_3;
  __pyx_t_3 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("pysndlib.clm.all_pass", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_37 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 3644, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  if (PyDict_SetItem(__pyx_t_37, __pyx_n_s_gen, __pyx_n_s_mus_any) < 0) __PYX_ERR(0, 3644, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_37, __pyx_n_s_insig, __pyx_n_s_float) < 0) __PYX_ERR(0, 3644, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_37, __pyx_n_s_pm, __pyx_kp_s_Optional_float) < 0) __PYX_ERR(0, 3644, __pyx_L1_error)
  __pyx_t_41 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_393all_pass, 0, __pyx_n_s_all_pass, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__424)); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 3644, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_41, __pyx_tuple__258);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_41, __pyx_t_37);
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_all_pass, __pyx_t_41) < 0) __PYX_ERR(0, 3644, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
/* … */
  __pyx_codeobj__424 = (PyObject*)__Pyx_PyCode_New(3, 0, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__395, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_all_pass, 3644, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__424)) __PYX_ERR(0, 3644, __pyx_L1_error)
/* … */
struct __pyx_opt_args_8pysndlib_3clm_all_pass {
  int __pyx_n;
  PyObject *pm;
};
 3645:     """
 3646:     all-pass filter insig value, pm changes the delay length.
 3647:     
 3648:     :param gen: all_pass gen
 3649:     :param insig: input value
 3650:     :param pm: change \in delay length size. can be + or -
 3651:     :rtype: float
 3652:     """
+3653:     if pm:
  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_pm); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 3653, __pyx_L1_error)
  if (__pyx_t_1) {
/* … */
  }
+3654:         return cclm.mus_all_pass(gen._ptr, insig, pm)
    __pyx_t_2 = __pyx_PyFloat_AsDouble(__pyx_v_pm); if (unlikely((__pyx_t_2 == ((mus_float_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 3654, __pyx_L1_error)
    __pyx_r = mus_all_pass(__pyx_v_gen->_ptr, __pyx_v_insig, __pyx_t_2);
    goto __pyx_L0;
 3655:     else:
+3656:         return cclm.mus_all_pass_unmodulated(gen._ptr, insig)
  /*else*/ {
    __pyx_r = mus_all_pass_unmodulated(__pyx_v_gen->_ptr, __pyx_v_insig);
    goto __pyx_L0;
  }
 3657: 
+3658: cpdef is_all_pass(gen: mus_any):
static PyObject *__pyx_pw_8pysndlib_3clm_395is_all_pass(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyObject *__pyx_f_8pysndlib_3clm_is_all_pass(struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen, CYTHON_UNUSED int __pyx_skip_dispatch) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_all_pass", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pysndlib.clm.is_all_pass", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_395is_all_pass(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_394is_all_pass, "\n    returns True if gen is a all_pass.\n    \n    :param gen: gen\n    :rtype: bool\n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_395is_all_pass = {"is_all_pass", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_395is_all_pass, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_394is_all_pass};
static PyObject *__pyx_pw_8pysndlib_3clm_395is_all_pass(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_all_pass (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_gen,0};
    PyObject* values[1] = {0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_gen)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 3658, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "is_all_pass") < 0)) __PYX_ERR(0, 3658, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
    }
    __pyx_v_gen = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)values[0]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("is_all_pass", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 3658, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.is_all_pass", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_gen), __pyx_ptype_8pysndlib_3clm_mus_any, 0, "gen", 0))) __PYX_ERR(0, 3658, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pysndlib_3clm_394is_all_pass(__pyx_self, __pyx_v_gen);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_394is_all_pass(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_all_pass", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_8pysndlib_3clm_is_all_pass(__pyx_v_gen, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3658, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pysndlib.clm.is_all_pass", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_41 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 3658, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  if (PyDict_SetItem(__pyx_t_41, __pyx_n_s_gen, __pyx_n_s_mus_any) < 0) __PYX_ERR(0, 3658, __pyx_L1_error)
  __pyx_t_37 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_395is_all_pass, 0, __pyx_n_s_is_all_pass, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__425)); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 3658, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_37, __pyx_t_41);
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_is_all_pass, __pyx_t_37) < 0) __PYX_ERR(0, 3658, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
/* … */
  __pyx_codeobj__425 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__46, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_is_all_pass, 3658, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__425)) __PYX_ERR(0, 3658, __pyx_L1_error)
 3659:     """
 3660:     returns True if gen is a all_pass.
 3661:     
 3662:     :param gen: gen
 3663:     :rtype: bool
 3664:     """
+3665:     return cclm.mus_is_all_pass(gen._ptr)
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyBool_FromLong(mus_is_all_pass(__pyx_v_gen->_ptr)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3665, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 3666: 
 3667: 
 3668: # ---------------- all-pass-bank ---------------- #
+3669: cpdef mus_any make_all_pass_bank(all_passes: list):
static PyObject *__pyx_pw_8pysndlib_3clm_397make_all_pass_bank(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_f_8pysndlib_3clm_make_all_pass_bank(PyObject *__pyx_v_all_passes, CYTHON_UNUSED int __pyx_skip_dispatch) {
  PyObject *__pyx_v_p = NULL;
  struct __pyx_obj_8pysndlib_3clm_mus_any_array *__pyx_v_all_passes_array = NULL;
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen = NULL;
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("make_all_pass_bank", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pysndlib.clm.make_all_pass_bank", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_p);
  __Pyx_XDECREF((PyObject *)__pyx_v_all_passes_array);
  __Pyx_XDECREF((PyObject *)__pyx_v_gen);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_397make_all_pass_bank(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_396make_all_pass_bank, "\n    return a new all_pass-bank generator.\n    \n    :param all_passes: list of all_pass gens\n    :return: all_pass_bank gen\n    :rtype: mus_any\n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_397make_all_pass_bank = {"make_all_pass_bank", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_397make_all_pass_bank, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_396make_all_pass_bank};
static PyObject *__pyx_pw_8pysndlib_3clm_397make_all_pass_bank(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_all_passes = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("make_all_pass_bank (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_all_passes,0};
    PyObject* values[1] = {0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_all_passes)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 3669, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "make_all_pass_bank") < 0)) __PYX_ERR(0, 3669, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
    }
    __pyx_v_all_passes = ((PyObject*)values[0]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("make_all_pass_bank", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 3669, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.make_all_pass_bank", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_all_passes), (&PyList_Type), 0, "all_passes", 1))) __PYX_ERR(0, 3669, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pysndlib_3clm_396make_all_pass_bank(__pyx_self, __pyx_v_all_passes);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_396make_all_pass_bank(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_all_passes) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("make_all_pass_bank", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = ((PyObject *)__pyx_f_8pysndlib_3clm_make_all_pass_bank(__pyx_v_all_passes, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3669, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pysndlib.clm.make_all_pass_bank", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__426 = PyTuple_Pack(1, __pyx_n_s_all_passes); if (unlikely(!__pyx_tuple__426)) __PYX_ERR(0, 3669, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__426);
  __Pyx_GIVEREF(__pyx_tuple__426);
/* … */
  __pyx_t_37 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 3669, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  if (PyDict_SetItem(__pyx_t_37, __pyx_n_s_all_passes, __pyx_n_s_list) < 0) __PYX_ERR(0, 3669, __pyx_L1_error)
  __pyx_t_41 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_397make_all_pass_bank, 0, __pyx_n_s_make_all_pass_bank, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__427)); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 3669, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_41, __pyx_t_37);
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_make_all_pass_bank, __pyx_t_41) < 0) __PYX_ERR(0, 3669, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
  __pyx_codeobj__427 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__426, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_make_all_pass_bank, 3669, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__427)) __PYX_ERR(0, 3669, __pyx_L1_error)
 3670:     """
 3671:     return a new all_pass-bank generator.
 3672:     
 3673:     :param all_passes: list of all_pass gens
 3674:     :return: all_pass_bank gen
 3675:     :rtype: mus_any
 3676:     """
+3677:     p = list(map(is_all_pass, all_passes))
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_is_all_pass); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3677, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3677, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1);
  __Pyx_INCREF(__pyx_v_all_passes);
  __Pyx_GIVEREF(__pyx_v_all_passes);
  PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_all_passes);
  __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_map, __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3677, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PySequence_ListKeepNew(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3677, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_p = ((PyObject*)__pyx_t_2);
  __pyx_t_2 = 0;
+3678:     if not all(p):
  __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_builtin_all, __pyx_v_p); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3678, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(0, 3678, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_4 = (!__pyx_t_3);
  if (unlikely(__pyx_t_4)) {
/* … */
  }
+3679:         raise TypeError(f'allpass list contains at least one element that is not a all_pass.')
    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__39, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3679, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __PYX_ERR(0, 3679, __pyx_L1_error)
/* … */
  __pyx_tuple__39 = PyTuple_Pack(1, __pyx_kp_u_allpass_list_contains_at_least_o); if (unlikely(!__pyx_tuple__39)) __PYX_ERR(0, 3679, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__39);
  __Pyx_GIVEREF(__pyx_tuple__39);
 3680: 
+3681:     all_passes_array = mus_any_array.from_pylist(all_passes)
  __pyx_t_2 = ((PyObject *)__pyx_f_8pysndlib_3clm_13mus_any_array_from_pylist(__pyx_v_all_passes)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3681, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_v_all_passes_array = ((struct __pyx_obj_8pysndlib_3clm_mus_any_array *)__pyx_t_2);
  __pyx_t_2 = 0;
+3682:     gen =  mus_any.from_ptr(cclm.mus_make_all_pass_bank(len(all_passes), all_passes_array.data))
  __pyx_t_5 = PyList_GET_SIZE(__pyx_v_all_passes); if (unlikely(__pyx_t_5 == ((Py_ssize_t)-1))) __PYX_ERR(0, 3682, __pyx_L1_error)
  __pyx_t_2 = ((PyObject *)__pyx_vtabptr_8pysndlib_3clm_mus_any->from_ptr(mus_make_all_pass_bank(__pyx_t_5, __pyx_v_all_passes_array->data), NULL)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3682, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_v_gen = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)__pyx_t_2);
  __pyx_t_2 = 0;
+3683:     gen.cache_extend([all_passes_array, all_passes])
  __pyx_t_2 = PyList_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3683, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF((PyObject *)__pyx_v_all_passes_array);
  __Pyx_GIVEREF((PyObject *)__pyx_v_all_passes_array);
  PyList_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_v_all_passes_array));
  __Pyx_INCREF(__pyx_v_all_passes);
  __Pyx_GIVEREF(__pyx_v_all_passes);
  PyList_SET_ITEM(__pyx_t_2, 1, __pyx_v_all_passes);
  __pyx_t_1 = ((struct __pyx_vtabstruct_8pysndlib_3clm_mus_any *)__pyx_v_gen->__pyx_vtab)->cache_extend(__pyx_v_gen, __pyx_t_2, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3683, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+3684:     return gen
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __Pyx_INCREF((PyObject *)__pyx_v_gen);
  __pyx_r = __pyx_v_gen;
  goto __pyx_L0;
 3685: 
+3686: cpdef cython.double all_pass_bank(gen: mus_any, insig: float):
static PyObject *__pyx_pw_8pysndlib_3clm_399all_pass_bank(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static double __pyx_f_8pysndlib_3clm_all_pass_bank(struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen, double __pyx_v_insig, CYTHON_UNUSED int __pyx_skip_dispatch) {
  double __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("all_pass_bank", 0);
/* … */
  /* function exit code */
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_399all_pass_bank(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_398all_pass_bank, "\n    sum an array of all_pass filters.\n    \n    :param gen: all_pass_bank gen\n    :param inputs: can be a list/array of inputs or a single input\n    :rtype: float\n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_399all_pass_bank = {"all_pass_bank", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_399all_pass_bank, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_398all_pass_bank};
static PyObject *__pyx_pw_8pysndlib_3clm_399all_pass_bank(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen = 0;
  double __pyx_v_insig;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("all_pass_bank (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_gen,&__pyx_n_s_insig,0};
    PyObject* values[2] = {0,0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_gen)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 3686, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_insig)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 3686, __pyx_L3_error)
        else {
          __Pyx_RaiseArgtupleInvalid("all_pass_bank", 1, 2, 2, 1); __PYX_ERR(0, 3686, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "all_pass_bank") < 0)) __PYX_ERR(0, 3686, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 2)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
      values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
    }
    __pyx_v_gen = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)values[0]);
    __pyx_v_insig = __pyx_PyFloat_AsDouble(values[1]); if (unlikely((__pyx_v_insig == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 3686, __pyx_L3_error)
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("all_pass_bank", 1, 2, 2, __pyx_nargs); __PYX_ERR(0, 3686, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.all_pass_bank", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_gen), __pyx_ptype_8pysndlib_3clm_mus_any, 0, "gen", 0))) __PYX_ERR(0, 3686, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pysndlib_3clm_398all_pass_bank(__pyx_self, __pyx_v_gen, __pyx_v_insig);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_398all_pass_bank(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen, double __pyx_v_insig) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("all_pass_bank", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_8pysndlib_3clm_all_pass_bank(__pyx_v_gen, __pyx_v_insig, 0); if (unlikely(__pyx_t_1 == ((double)-1) && PyErr_Occurred())) __PYX_ERR(0, 3686, __pyx_L1_error)
  __pyx_t_2 = PyFloat_FromDouble(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3686, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pysndlib.clm.all_pass_bank", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_41 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 3686, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  if (PyDict_SetItem(__pyx_t_41, __pyx_n_s_gen, __pyx_n_s_mus_any) < 0) __PYX_ERR(0, 3686, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_41, __pyx_n_s_insig, __pyx_n_s_float) < 0) __PYX_ERR(0, 3686, __pyx_L1_error)
  __pyx_t_37 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_399all_pass_bank, 0, __pyx_n_s_all_pass_bank, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__428)); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 3686, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_37, __pyx_t_41);
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_all_pass_bank, __pyx_t_37) < 0) __PYX_ERR(0, 3686, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
/* … */
  __pyx_codeobj__428 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__350, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_all_pass_bank, 3686, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__428)) __PYX_ERR(0, 3686, __pyx_L1_error)
 3687:     """
 3688:     sum an array of all_pass filters.
 3689:     
 3690:     :param gen: all_pass_bank gen
 3691:     :param inputs: can be a list/array of inputs or a single input
 3692:     :rtype: float
 3693:     """
+3694:     return cclm.mus_all_pass_bank(gen._ptr, insig)
  __pyx_r = mus_all_pass_bank(__pyx_v_gen->_ptr, __pyx_v_insig);
  goto __pyx_L0;
 3695: 
+3696: cpdef bint is_all_pass_bank(gen: mus_any):
static PyObject *__pyx_pw_8pysndlib_3clm_401is_all_pass_bank(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static int __pyx_f_8pysndlib_3clm_is_all_pass_bank(struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen, CYTHON_UNUSED int __pyx_skip_dispatch) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_all_pass_bank", 0);
/* … */
  /* function exit code */
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_401is_all_pass_bank(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_400is_all_pass_bank, "\n    returns True if gen is a all_pass_bank.\n    \n    \n    :param gen: gen\n    :rtype: bool\n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_401is_all_pass_bank = {"is_all_pass_bank", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_401is_all_pass_bank, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_400is_all_pass_bank};
static PyObject *__pyx_pw_8pysndlib_3clm_401is_all_pass_bank(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_all_pass_bank (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_gen,0};
    PyObject* values[1] = {0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_gen)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 3696, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "is_all_pass_bank") < 0)) __PYX_ERR(0, 3696, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
    }
    __pyx_v_gen = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)values[0]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("is_all_pass_bank", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 3696, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.is_all_pass_bank", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_gen), __pyx_ptype_8pysndlib_3clm_mus_any, 0, "gen", 0))) __PYX_ERR(0, 3696, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pysndlib_3clm_400is_all_pass_bank(__pyx_self, __pyx_v_gen);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_400is_all_pass_bank(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_all_pass_bank", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_8pysndlib_3clm_is_all_pass_bank(__pyx_v_gen, 0); if (unlikely(__pyx_t_1 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 3696, __pyx_L1_error)
  __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3696, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pysndlib.clm.is_all_pass_bank", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_37 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 3696, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  if (PyDict_SetItem(__pyx_t_37, __pyx_n_s_gen, __pyx_n_s_mus_any) < 0) __PYX_ERR(0, 3696, __pyx_L1_error)
  __pyx_t_41 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_401is_all_pass_bank, 0, __pyx_n_s_is_all_pass_bank, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__429)); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 3696, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_41, __pyx_t_37);
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_is_all_pass_bank, __pyx_t_41) < 0) __PYX_ERR(0, 3696, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
/* … */
  __pyx_codeobj__429 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__46, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_is_all_pass_bank, 3696, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__429)) __PYX_ERR(0, 3696, __pyx_L1_error)
 3697:     """
 3698:     returns True if gen is a all_pass_bank.
 3699:     
 3700:     
 3701:     :param gen: gen
 3702:     :rtype: bool
 3703:     """
+3704:     return cclm.mus_is_all_pass_bank(gen._ptr)
  __pyx_r = mus_is_all_pass_bank(__pyx_v_gen->_ptr);
  goto __pyx_L0;
 3705: 
 3706: 
 3707: # ---------------- one_pole_all_pass ---------------- #
+3708: cpdef mus_any make_one_pole_all_pass(size: int, coeff: float):
static PyObject *__pyx_pw_8pysndlib_3clm_403make_one_pole_all_pass(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_f_8pysndlib_3clm_make_one_pole_all_pass(PyObject *__pyx_v_size, double __pyx_v_coeff, CYTHON_UNUSED int __pyx_skip_dispatch) {
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("make_one_pole_all_pass", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pysndlib.clm.make_one_pole_all_pass", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_403make_one_pole_all_pass(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_402make_one_pole_all_pass, "\n    return a new one_pole all_pass filter size, coeff.\n    \n    \n    :param size: length \\in samples of the delay line\n    :param coeff: coeff of one pole filter\n    :return: one_pole_all_pass gen\n    :rtype: mus_any\n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_403make_one_pole_all_pass = {"make_one_pole_all_pass", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_403make_one_pole_all_pass, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_402make_one_pole_all_pass};
static PyObject *__pyx_pw_8pysndlib_3clm_403make_one_pole_all_pass(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_size = 0;
  double __pyx_v_coeff;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("make_one_pole_all_pass (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_size,&__pyx_n_s_coeff,0};
    PyObject* values[2] = {0,0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_size)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 3708, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_coeff)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 3708, __pyx_L3_error)
        else {
          __Pyx_RaiseArgtupleInvalid("make_one_pole_all_pass", 1, 2, 2, 1); __PYX_ERR(0, 3708, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "make_one_pole_all_pass") < 0)) __PYX_ERR(0, 3708, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 2)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
      values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
    }
    __pyx_v_size = ((PyObject*)values[0]);
    __pyx_v_coeff = __pyx_PyFloat_AsDouble(values[1]); if (unlikely((__pyx_v_coeff == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 3708, __pyx_L3_error)
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("make_one_pole_all_pass", 1, 2, 2, __pyx_nargs); __PYX_ERR(0, 3708, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.make_one_pole_all_pass", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_size), (&PyInt_Type), 0, "size", 1))) __PYX_ERR(0, 3708, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pysndlib_3clm_402make_one_pole_all_pass(__pyx_self, __pyx_v_size, __pyx_v_coeff);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_402make_one_pole_all_pass(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_size, double __pyx_v_coeff) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("make_one_pole_all_pass", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = ((PyObject *)__pyx_f_8pysndlib_3clm_make_one_pole_all_pass(__pyx_v_size, __pyx_v_coeff, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3708, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pysndlib.clm.make_one_pole_all_pass", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__430 = PyTuple_Pack(2, __pyx_n_s_size, __pyx_n_s_coeff); if (unlikely(!__pyx_tuple__430)) __PYX_ERR(0, 3708, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__430);
  __Pyx_GIVEREF(__pyx_tuple__430);
/* … */
  __pyx_t_41 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 3708, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  if (PyDict_SetItem(__pyx_t_41, __pyx_n_s_size, __pyx_n_s_int_2) < 0) __PYX_ERR(0, 3708, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_41, __pyx_n_s_coeff, __pyx_n_s_float) < 0) __PYX_ERR(0, 3708, __pyx_L1_error)
  __pyx_t_37 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_403make_one_pole_all_pass, 0, __pyx_n_s_make_one_pole_all_pass, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__431)); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 3708, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_37, __pyx_t_41);
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_make_one_pole_all_pass, __pyx_t_37) < 0) __PYX_ERR(0, 3708, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
  __pyx_codeobj__431 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__430, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_make_one_pole_all_pass, 3708, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__431)) __PYX_ERR(0, 3708, __pyx_L1_error)
 3709:     """
 3710:     return a new one_pole all_pass filter size, coeff.
 3711:     
 3712:     
 3713:     :param size: length \in samples of the delay line
 3714:     :param coeff: coeff of one pole filter
 3715:     :return: one_pole_all_pass gen
 3716:     :rtype: mus_any
 3717:     """
+3718:     return mus_any.from_ptr(cclm.mus_make_one_pole_all_pass(size, coeff))
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __pyx_t_1 = __Pyx_PyInt_As_int(__pyx_v_size); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 3718, __pyx_L1_error)
  __pyx_t_2 = ((PyObject *)__pyx_vtabptr_8pysndlib_3clm_mus_any->from_ptr(mus_make_one_pole_all_pass(__pyx_t_1, __pyx_v_coeff), NULL)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3718, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)__pyx_t_2);
  __pyx_t_2 = 0;
  goto __pyx_L0;
 3719: 
+3720: cpdef cython.double one_pole_all_pass(gen: mus_any, insig: float):
static PyObject *__pyx_pw_8pysndlib_3clm_405one_pole_all_pass(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static double __pyx_f_8pysndlib_3clm_one_pole_all_pass(struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen, double __pyx_v_insig, CYTHON_UNUSED int __pyx_skip_dispatch) {
  double __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("one_pole_all_pass", 0);
/* … */
  /* function exit code */
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_405one_pole_all_pass(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_404one_pole_all_pass, "\n    one pole all pass filter of input.\n    \n    :param gen: one_pole_all_pass gen\n    :param insig: input value\n    :rtype: float\n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_405one_pole_all_pass = {"one_pole_all_pass", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_405one_pole_all_pass, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_404one_pole_all_pass};
static PyObject *__pyx_pw_8pysndlib_3clm_405one_pole_all_pass(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen = 0;
  double __pyx_v_insig;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("one_pole_all_pass (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_gen,&__pyx_n_s_insig,0};
    PyObject* values[2] = {0,0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_gen)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 3720, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_insig)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 3720, __pyx_L3_error)
        else {
          __Pyx_RaiseArgtupleInvalid("one_pole_all_pass", 1, 2, 2, 1); __PYX_ERR(0, 3720, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "one_pole_all_pass") < 0)) __PYX_ERR(0, 3720, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 2)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
      values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
    }
    __pyx_v_gen = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)values[0]);
    __pyx_v_insig = __pyx_PyFloat_AsDouble(values[1]); if (unlikely((__pyx_v_insig == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 3720, __pyx_L3_error)
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("one_pole_all_pass", 1, 2, 2, __pyx_nargs); __PYX_ERR(0, 3720, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.one_pole_all_pass", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_gen), __pyx_ptype_8pysndlib_3clm_mus_any, 0, "gen", 0))) __PYX_ERR(0, 3720, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pysndlib_3clm_404one_pole_all_pass(__pyx_self, __pyx_v_gen, __pyx_v_insig);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_404one_pole_all_pass(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen, double __pyx_v_insig) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("one_pole_all_pass", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_8pysndlib_3clm_one_pole_all_pass(__pyx_v_gen, __pyx_v_insig, 0); if (unlikely(__pyx_t_1 == ((double)-1) && PyErr_Occurred())) __PYX_ERR(0, 3720, __pyx_L1_error)
  __pyx_t_2 = PyFloat_FromDouble(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3720, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pysndlib.clm.one_pole_all_pass", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_37 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 3720, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  if (PyDict_SetItem(__pyx_t_37, __pyx_n_s_gen, __pyx_n_s_mus_any) < 0) __PYX_ERR(0, 3720, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_37, __pyx_n_s_insig, __pyx_n_s_float) < 0) __PYX_ERR(0, 3720, __pyx_L1_error)
  __pyx_t_41 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_405one_pole_all_pass, 0, __pyx_n_s_one_pole_all_pass, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__432)); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 3720, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_41, __pyx_t_37);
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_one_pole_all_pass, __pyx_t_41) < 0) __PYX_ERR(0, 3720, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
/* … */
  __pyx_codeobj__432 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__350, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_one_pole_all_pass, 3720, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__432)) __PYX_ERR(0, 3720, __pyx_L1_error)
 3721:     """
 3722:     one pole all pass filter of input.
 3723:     
 3724:     :param gen: one_pole_all_pass gen
 3725:     :param insig: input value
 3726:     :rtype: float
 3727:     """
+3728:     return cclm.mus_one_pole_all_pass(gen._ptr, insig)
  __pyx_r = mus_one_pole_all_pass(__pyx_v_gen->_ptr, __pyx_v_insig);
  goto __pyx_L0;
 3729: 
+3730: cpdef bint is_one_pole_all_pass(gen: mus_any):
static PyObject *__pyx_pw_8pysndlib_3clm_407is_one_pole_all_pass(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static int __pyx_f_8pysndlib_3clm_is_one_pole_all_pass(struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen, CYTHON_UNUSED int __pyx_skip_dispatch) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_one_pole_all_pass", 0);
/* … */
  /* function exit code */
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_407is_one_pole_all_pass(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_406is_one_pole_all_pass, "\n    returns True if gen is a one_pole_all_pass.\n    \n    :param gen: gen\n    :rtype: bool\n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_407is_one_pole_all_pass = {"is_one_pole_all_pass", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_407is_one_pole_all_pass, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_406is_one_pole_all_pass};
static PyObject *__pyx_pw_8pysndlib_3clm_407is_one_pole_all_pass(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_one_pole_all_pass (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_gen,0};
    PyObject* values[1] = {0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_gen)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 3730, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "is_one_pole_all_pass") < 0)) __PYX_ERR(0, 3730, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
    }
    __pyx_v_gen = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)values[0]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("is_one_pole_all_pass", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 3730, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.is_one_pole_all_pass", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_gen), __pyx_ptype_8pysndlib_3clm_mus_any, 0, "gen", 0))) __PYX_ERR(0, 3730, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pysndlib_3clm_406is_one_pole_all_pass(__pyx_self, __pyx_v_gen);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_406is_one_pole_all_pass(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_one_pole_all_pass", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_8pysndlib_3clm_is_one_pole_all_pass(__pyx_v_gen, 0); if (unlikely(__pyx_t_1 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 3730, __pyx_L1_error)
  __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3730, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pysndlib.clm.is_one_pole_all_pass", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_41 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 3730, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  if (PyDict_SetItem(__pyx_t_41, __pyx_n_s_gen, __pyx_n_s_mus_any) < 0) __PYX_ERR(0, 3730, __pyx_L1_error)
  __pyx_t_37 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_407is_one_pole_all_pass, 0, __pyx_n_s_is_one_pole_all_pass, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__433)); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 3730, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_37, __pyx_t_41);
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_is_one_pole_all_pass, __pyx_t_37) < 0) __PYX_ERR(0, 3730, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
/* … */
  __pyx_codeobj__433 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__46, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_is_one_pole_all_pass, 3730, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__433)) __PYX_ERR(0, 3730, __pyx_L1_error)
 3731:     """
 3732:     returns True if gen is a one_pole_all_pass.
 3733:     
 3734:     :param gen: gen
 3735:     :rtype: bool
 3736:     """
+3737:     return cclm.mus_is_one_pole_all_pass(gen._ptr)
  __pyx_r = mus_is_one_pole_all_pass(__pyx_v_gen->_ptr);
  goto __pyx_L0;
 3738: 
 3739: # ---------------- moving-average ---------------- #
+3740: cpdef mus_any make_moving_average(size: int, initial_contents=None, initial_element: Optional[float]=0.0):
static PyObject *__pyx_pw_8pysndlib_3clm_409make_moving_average(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_f_8pysndlib_3clm_make_moving_average(PyObject *__pyx_v_size, CYTHON_UNUSED int __pyx_skip_dispatch, struct __pyx_opt_args_8pysndlib_3clm_make_moving_average *__pyx_optional_args) {
  PyObject *__pyx_v_initial_contents = ((PyObject *)Py_None);
  PyObject *__pyx_v_initial_element = ((PyObject *)__pyx_float_0_0);
  __Pyx_memviewslice __pyx_v_initial_contents_view = { 0, 0, { 0 }, { 0 }, { 0 } };
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen = NULL;
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("make_moving_average", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_initial_contents = __pyx_optional_args->initial_contents;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_initial_element = __pyx_optional_args->initial_element;
      }
    }
  }
  __Pyx_INCREF(__pyx_v_initial_contents);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __PYX_XCLEAR_MEMVIEW(&__pyx_t_5, 1);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_AddTraceback("pysndlib.clm.make_moving_average", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __PYX_XCLEAR_MEMVIEW(&__pyx_v_initial_contents_view, 1);
  __Pyx_XDECREF((PyObject *)__pyx_v_gen);
  __Pyx_XDECREF(__pyx_v_initial_contents);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_409make_moving_average(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_408make_moving_average, "\n    return a new moving_average generator. \n    \n    :param size: averaging length \\in samples\n    :param initial_contents: initial values\n    :param initial_element: initial element\n    :return: moving_average gen\n    :rtype: mus_any\n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_409make_moving_average = {"make_moving_average", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_409make_moving_average, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_408make_moving_average};
static PyObject *__pyx_pw_8pysndlib_3clm_409make_moving_average(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_size = 0;
  PyObject *__pyx_v_initial_contents = 0;
  PyObject *__pyx_v_initial_element = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("make_moving_average (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_size,&__pyx_n_s_initial_contents,&__pyx_n_s_initial_element,0};
    PyObject* values[3] = {0,0,0};
    values[1] = ((PyObject *)Py_None);
    values[2] = ((PyObject *)__pyx_float_0_0);
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_size)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 3740, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_initial_contents);
          if (value) { values[1] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 3740, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_initial_element);
          if (value) { values[2] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 3740, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "make_moving_average") < 0)) __PYX_ERR(0, 3740, __pyx_L3_error)
      }
    } else {
      switch (__pyx_nargs) {
        case  3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_size = ((PyObject*)values[0]);
    __pyx_v_initial_contents = values[1];
    __pyx_v_initial_element = values[2];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("make_moving_average", 0, 1, 3, __pyx_nargs); __PYX_ERR(0, 3740, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.make_moving_average", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_size), (&PyInt_Type), 0, "size", 1))) __PYX_ERR(0, 3740, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pysndlib_3clm_408make_moving_average(__pyx_self, __pyx_v_size, __pyx_v_initial_contents, __pyx_v_initial_element);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_408make_moving_average(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_size, PyObject *__pyx_v_initial_contents, PyObject *__pyx_v_initial_element) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("make_moving_average", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2.__pyx_n = 2;
  __pyx_t_2.initial_contents = __pyx_v_initial_contents;
  __pyx_t_2.initial_element = __pyx_v_initial_element;
  __pyx_t_1 = ((PyObject *)__pyx_f_8pysndlib_3clm_make_moving_average(__pyx_v_size, 0, &__pyx_t_2)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3740, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pysndlib.clm.make_moving_average", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__434 = PyTuple_Pack(3, __pyx_n_s_size, __pyx_n_s_initial_contents, __pyx_n_s_initial_element); if (unlikely(!__pyx_tuple__434)) __PYX_ERR(0, 3740, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__434);
  __Pyx_GIVEREF(__pyx_tuple__434);
  __pyx_codeobj__435 = (PyObject*)__Pyx_PyCode_New(3, 0, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__434, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_make_moving_average, 3740, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__435)) __PYX_ERR(0, 3740, __pyx_L1_error)
/* … */
  __pyx_t_37 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 3740, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  if (PyDict_SetItem(__pyx_t_37, __pyx_n_s_size, __pyx_n_s_int_2) < 0) __PYX_ERR(0, 3740, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_37, __pyx_n_s_initial_element, __pyx_kp_s_Optional_float) < 0) __PYX_ERR(0, 3740, __pyx_L1_error)
  __pyx_t_41 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_409make_moving_average, 0, __pyx_n_s_make_moving_average, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__435)); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 3740, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_41, __pyx_tuple__436);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_41, __pyx_t_37);
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_make_moving_average, __pyx_t_41) < 0) __PYX_ERR(0, 3740, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
  __pyx_tuple__436 = PyTuple_Pack(2, Py_None, __pyx_float_0_0); if (unlikely(!__pyx_tuple__436)) __PYX_ERR(0, 3740, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__436);
  __Pyx_GIVEREF(__pyx_tuple__436);
/* … */
struct __pyx_opt_args_8pysndlib_3clm_make_moving_average {
  int __pyx_n;
  PyObject *initial_contents;
  PyObject *initial_element;
};
 3741:     """
 3742:     return a new moving_average generator. 
 3743:     
 3744:     :param size: averaging length \in samples
 3745:     :param initial_contents: initial values
 3746:     :param initial_element: initial element
 3747:     :return: moving_average gen
 3748:     :rtype: mus_any
 3749:     """
 3750: 
+3751:     check_range('size', size, 0.0, None)
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_check_range); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3751, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  __pyx_t_4 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
      __pyx_t_4 = 1;
    }
  }
  {
    PyObject *__pyx_callargs[5] = {__pyx_t_3, __pyx_n_s_size, __pyx_v_size, __pyx_float_0_0, Py_None};
    __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 4+__pyx_t_4);
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3751, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 3752: 
+3753:     cdef double [:] initial_contents_view = None
  __pyx_t_5 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(Py_None, PyBUF_WRITABLE); if (unlikely(!__pyx_t_5.memview)) __PYX_ERR(0, 3753, __pyx_L1_error)
  __pyx_v_initial_contents_view = __pyx_t_5;
  __pyx_t_5.memview = NULL;
  __pyx_t_5.data = NULL;
 3754: 
+3755:     if initial_contents is not None:
  __pyx_t_6 = (__pyx_v_initial_contents != Py_None);
  if (__pyx_t_6) {
/* … */
    goto __pyx_L3;
  }
+3756:         if isinstance(initial_contents, list):
    __pyx_t_6 = PyList_Check(__pyx_v_initial_contents); 
    if (__pyx_t_6) {
/* … */
    }
+3757:             initial_contents = np.array(initial_contents)
      __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3757, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_array); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3757, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_t_2 = NULL;
      __pyx_t_4 = 0;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
        __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
        if (likely(__pyx_t_2)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
          __Pyx_INCREF(__pyx_t_2);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_3, function);
          __pyx_t_4 = 1;
        }
      }
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_v_initial_contents};
        __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4);
        __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
        if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3757, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      }
      __Pyx_DECREF_SET(__pyx_v_initial_contents, __pyx_t_1);
      __pyx_t_1 = 0;
+3758:         check_ndim(initial_contents)
    __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_check_ndim); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3758, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_2 = NULL;
    __pyx_t_4 = 0;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
      __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
      if (likely(__pyx_t_2)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
        __Pyx_INCREF(__pyx_t_2);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_3, function);
        __pyx_t_4 = 1;
      }
    }
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_v_initial_contents};
      __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4);
      __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3758, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    }
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+3759:         initial_contents_view = initial_contents
    __pyx_t_5 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_initial_contents, PyBUF_WRITABLE); if (unlikely(!__pyx_t_5.memview)) __PYX_ERR(0, 3759, __pyx_L1_error)
    __PYX_XCLEAR_MEMVIEW(&__pyx_v_initial_contents_view, 1);
    __pyx_v_initial_contents_view = __pyx_t_5;
    __pyx_t_5.memview = NULL;
    __pyx_t_5.data = NULL;
 3760:     else:
+3761:         initial_contents = np.zeros(size, dtype=np.double)
  /*else*/ {
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3761, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_zeros); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3761, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3761, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_INCREF(__pyx_v_size);
    __Pyx_GIVEREF(__pyx_v_size);
    PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_size);
    __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3761, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_np); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3761, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_double); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 3761, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_dtype, __pyx_t_8) < 0) __PYX_ERR(0, 3761, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 3761, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF_SET(__pyx_v_initial_contents, __pyx_t_8);
    __pyx_t_8 = 0;
+3762:         check_ndim(initial_contents)
    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_check_ndim); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3762, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_1 = NULL;
    __pyx_t_4 = 0;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
      __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_2);
      if (likely(__pyx_t_1)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
        __Pyx_INCREF(__pyx_t_1);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_2, function);
        __pyx_t_4 = 1;
      }
    }
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_1, __pyx_v_initial_contents};
      __pyx_t_8 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4);
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 3762, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    }
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+3763:         initial_contents.fill(initial_element)
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_initial_contents, __pyx_n_s_fill); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3763, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_1 = NULL;
    __pyx_t_4 = 0;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
      __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_2);
      if (likely(__pyx_t_1)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
        __Pyx_INCREF(__pyx_t_1);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_2, function);
        __pyx_t_4 = 1;
      }
    }
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_1, __pyx_v_initial_element};
      __pyx_t_8 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4);
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 3763, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    }
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+3764:         initial_contents_view = initial_contents
    __pyx_t_5 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_initial_contents, PyBUF_WRITABLE); if (unlikely(!__pyx_t_5.memview)) __PYX_ERR(0, 3764, __pyx_L1_error)
    __PYX_XCLEAR_MEMVIEW(&__pyx_v_initial_contents_view, 1);
    __pyx_v_initial_contents_view = __pyx_t_5;
    __pyx_t_5.memview = NULL;
    __pyx_t_5.data = NULL;
  }
  __pyx_L3:;
 3765: 
+3766:     if initial_contents_view is not None:
  __pyx_t_6 = (((PyObject *) __pyx_v_initial_contents_view.memview) != Py_None);
  if (__pyx_t_6) {
/* … */
  }
+3767:         gen = mus_any.from_ptr(cclm.mus_make_moving_average(size, &initial_contents_view[0]))
    __pyx_t_4 = __Pyx_PyInt_As_int(__pyx_v_size); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 3767, __pyx_L1_error)
    __pyx_t_9 = 0;
    __pyx_t_10 = -1;
    if (__pyx_t_9 < 0) {
      __pyx_t_9 += __pyx_v_initial_contents_view.shape[0];
      if (unlikely(__pyx_t_9 < 0)) __pyx_t_10 = 0;
    } else if (unlikely(__pyx_t_9 >= __pyx_v_initial_contents_view.shape[0])) __pyx_t_10 = 0;
    if (unlikely(__pyx_t_10 != -1)) {
      __Pyx_RaiseBufferIndexError(__pyx_t_10);
      __PYX_ERR(0, 3767, __pyx_L1_error)
    }
    __pyx_t_8 = ((PyObject *)__pyx_vtabptr_8pysndlib_3clm_mus_any->from_ptr(mus_make_moving_average(__pyx_t_4, (&(*((double *) ( /* dim=0 */ (__pyx_v_initial_contents_view.data + __pyx_t_9 * __pyx_v_initial_contents_view.strides[0]) ))))), NULL)); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 3767, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __pyx_v_gen = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)__pyx_t_8);
    __pyx_t_8 = 0;
 3768: 
+3769:     gen.cache_append(initial_contents)
  if (unlikely(!__pyx_v_gen)) { __Pyx_RaiseUnboundLocalError("gen"); __PYX_ERR(0, 3769, __pyx_L1_error) }
  __pyx_t_8 = ((struct __pyx_vtabstruct_8pysndlib_3clm_mus_any *)__pyx_v_gen->__pyx_vtab)->cache_append(__pyx_v_gen, __pyx_v_initial_contents, 0); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 3769, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+3770:     return gen
  __Pyx_XDECREF((PyObject *)__pyx_r);
  if (unlikely(!__pyx_v_gen)) { __Pyx_RaiseUnboundLocalError("gen"); __PYX_ERR(0, 3770, __pyx_L1_error) }
  __Pyx_INCREF((PyObject *)__pyx_v_gen);
  __pyx_r = __pyx_v_gen;
  goto __pyx_L0;
 3771: 
 3772: 
+3773: cpdef cython.double moving_average(gen: mus_any, insig: float):
static PyObject *__pyx_pw_8pysndlib_3clm_411moving_average(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static double __pyx_f_8pysndlib_3clm_moving_average(struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen, double __pyx_v_insig, CYTHON_UNUSED int __pyx_skip_dispatch) {
  double __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("moving_average", 0);
/* … */
  /* function exit code */
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_411moving_average(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_410moving_average, "\n    moving window average.\n    \n    :param gen: moving_average gen\n    :param insig: input value\n    :rtype: float\n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_411moving_average = {"moving_average", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_411moving_average, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_410moving_average};
static PyObject *__pyx_pw_8pysndlib_3clm_411moving_average(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen = 0;
  double __pyx_v_insig;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("moving_average (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_gen,&__pyx_n_s_insig,0};
    PyObject* values[2] = {0,0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_gen)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 3773, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_insig)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 3773, __pyx_L3_error)
        else {
          __Pyx_RaiseArgtupleInvalid("moving_average", 1, 2, 2, 1); __PYX_ERR(0, 3773, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "moving_average") < 0)) __PYX_ERR(0, 3773, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 2)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
      values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
    }
    __pyx_v_gen = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)values[0]);
    __pyx_v_insig = __pyx_PyFloat_AsDouble(values[1]); if (unlikely((__pyx_v_insig == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 3773, __pyx_L3_error)
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("moving_average", 1, 2, 2, __pyx_nargs); __PYX_ERR(0, 3773, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.moving_average", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_gen), __pyx_ptype_8pysndlib_3clm_mus_any, 0, "gen", 0))) __PYX_ERR(0, 3773, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pysndlib_3clm_410moving_average(__pyx_self, __pyx_v_gen, __pyx_v_insig);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_410moving_average(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen, double __pyx_v_insig) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("moving_average", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_8pysndlib_3clm_moving_average(__pyx_v_gen, __pyx_v_insig, 0); if (unlikely(__pyx_t_1 == ((double)-1) && PyErr_Occurred())) __PYX_ERR(0, 3773, __pyx_L1_error)
  __pyx_t_2 = PyFloat_FromDouble(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3773, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pysndlib.clm.moving_average", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_41 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 3773, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  if (PyDict_SetItem(__pyx_t_41, __pyx_n_s_gen, __pyx_n_s_mus_any) < 0) __PYX_ERR(0, 3773, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_41, __pyx_n_s_insig, __pyx_n_s_float) < 0) __PYX_ERR(0, 3773, __pyx_L1_error)
  __pyx_t_37 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_411moving_average, 0, __pyx_n_s_moving_average, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__437)); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 3773, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_37, __pyx_t_41);
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_moving_average, __pyx_t_37) < 0) __PYX_ERR(0, 3773, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
/* … */
  __pyx_codeobj__437 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__350, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_moving_average, 3773, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__437)) __PYX_ERR(0, 3773, __pyx_L1_error)
 3774:     """
 3775:     moving window average.
 3776:     
 3777:     :param gen: moving_average gen
 3778:     :param insig: input value
 3779:     :rtype: float
 3780:     """
+3781:     return cclm.mus_moving_average(gen._ptr, insig)
  __pyx_r = mus_moving_average(__pyx_v_gen->_ptr, __pyx_v_insig);
  goto __pyx_L0;
 3782: 
+3783: cpdef bint is_moving_average(gen: mus_any):
static PyObject *__pyx_pw_8pysndlib_3clm_413is_moving_average(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static int __pyx_f_8pysndlib_3clm_is_moving_average(struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen, CYTHON_UNUSED int __pyx_skip_dispatch) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_moving_average", 0);
/* … */
  /* function exit code */
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_413is_moving_average(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_412is_moving_average, "\n    returns True if gen is a moving_average.\n    \n    :param gen: gen\n    :rtype: bool\n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_413is_moving_average = {"is_moving_average", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_413is_moving_average, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_412is_moving_average};
static PyObject *__pyx_pw_8pysndlib_3clm_413is_moving_average(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_moving_average (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_gen,0};
    PyObject* values[1] = {0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_gen)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 3783, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "is_moving_average") < 0)) __PYX_ERR(0, 3783, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
    }
    __pyx_v_gen = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)values[0]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("is_moving_average", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 3783, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.is_moving_average", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_gen), __pyx_ptype_8pysndlib_3clm_mus_any, 0, "gen", 0))) __PYX_ERR(0, 3783, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pysndlib_3clm_412is_moving_average(__pyx_self, __pyx_v_gen);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_412is_moving_average(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_moving_average", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_8pysndlib_3clm_is_moving_average(__pyx_v_gen, 0); if (unlikely(__pyx_t_1 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 3783, __pyx_L1_error)
  __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3783, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pysndlib.clm.is_moving_average", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_37 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 3783, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  if (PyDict_SetItem(__pyx_t_37, __pyx_n_s_gen, __pyx_n_s_mus_any) < 0) __PYX_ERR(0, 3783, __pyx_L1_error)
  __pyx_t_41 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_413is_moving_average, 0, __pyx_n_s_is_moving_average, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__438)); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 3783, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_41, __pyx_t_37);
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_is_moving_average, __pyx_t_41) < 0) __PYX_ERR(0, 3783, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
/* … */
  __pyx_codeobj__438 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__46, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_is_moving_average, 3783, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__438)) __PYX_ERR(0, 3783, __pyx_L1_error)
 3784:     """
 3785:     returns True if gen is a moving_average.
 3786:     
 3787:     :param gen: gen
 3788:     :rtype: bool
 3789:     """
+3790:     return cclm.mus_is_moving_average(gen._ptr)
  __pyx_r = mus_is_moving_average(__pyx_v_gen->_ptr);
  goto __pyx_L0;
 3791: 
 3792: # ---------------- moving-max ---------------- #
+3793: cpdef mus_any make_moving_max(size: int,
static PyObject *__pyx_pw_8pysndlib_3clm_415make_moving_max(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_f_8pysndlib_3clm_make_moving_max(PyObject *__pyx_v_size, CYTHON_UNUSED int __pyx_skip_dispatch, struct __pyx_opt_args_8pysndlib_3clm_make_moving_max *__pyx_optional_args) {
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __PYX_XCLEAR_MEMVIEW(&__pyx_t_5, 1);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_AddTraceback("pysndlib.clm.make_moving_max", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __PYX_XCLEAR_MEMVIEW(&__pyx_v_initial_contents_view, 1);
  __Pyx_XDECREF((PyObject *)__pyx_v_gen);
  __Pyx_XDECREF(__pyx_v_initial_contents);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_415make_moving_max(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_414make_moving_max, "\n    return a new moving-max generator.\n    \n    :param size: max window length \\in samples\n    :param initial_contents: initial values\n    :param initial_element: initial element\n    :return: moving_max gen\n    :rtype: mus_any\n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_415make_moving_max = {"make_moving_max", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_415make_moving_max, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_414make_moving_max};
static PyObject *__pyx_pw_8pysndlib_3clm_415make_moving_max(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_size = 0;
  PyObject *__pyx_v_initial_contents = 0;
  PyObject *__pyx_v_initial_element = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("make_moving_max (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_size,&__pyx_n_s_initial_contents,&__pyx_n_s_initial_element,0};
    PyObject* values[3] = {0,0,0};
/* … */
  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_414make_moving_max(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_size, PyObject *__pyx_v_initial_contents, PyObject *__pyx_v_initial_element) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("make_moving_max", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2.__pyx_n = 2;
  __pyx_t_2.initial_contents = __pyx_v_initial_contents;
  __pyx_t_2.initial_element = __pyx_v_initial_element;
  __pyx_t_1 = ((PyObject *)__pyx_f_8pysndlib_3clm_make_moving_max(__pyx_v_size, 0, &__pyx_t_2)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3793, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pysndlib.clm.make_moving_max", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_codeobj__439 = (PyObject*)__Pyx_PyCode_New(3, 0, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__434, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_make_moving_max, 3793, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__439)) __PYX_ERR(0, 3793, __pyx_L1_error)
/* … */
  __pyx_t_41 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 3793, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  if (PyDict_SetItem(__pyx_t_41, __pyx_n_s_size, __pyx_n_s_int_2) < 0) __PYX_ERR(0, 3793, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_41, __pyx_n_s_initial_element, __pyx_kp_s_Optional_float) < 0) __PYX_ERR(0, 3793, __pyx_L1_error)
  __pyx_t_37 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_415make_moving_max, 0, __pyx_n_s_make_moving_max, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__439)); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 3793, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_37, __pyx_tuple__440);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_37, __pyx_t_41);
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_make_moving_max, __pyx_t_37) < 0) __PYX_ERR(0, 3793, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
  __pyx_tuple__440 = PyTuple_Pack(2, Py_None, __pyx_float_0_0); if (unlikely(!__pyx_tuple__440)) __PYX_ERR(0, 3793, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__440);
  __Pyx_GIVEREF(__pyx_tuple__440);
/* … */
struct __pyx_opt_args_8pysndlib_3clm_make_moving_max {
  int __pyx_n;
  PyObject *initial_contents;
  PyObject *initial_element;
};
+3794:                 initial_contents=None,
  PyObject *__pyx_v_initial_contents = ((PyObject *)Py_None);
  PyObject *__pyx_v_initial_element = ((PyObject *)__pyx_float_0_0);
  __Pyx_memviewslice __pyx_v_initial_contents_view = { 0, 0, { 0 }, { 0 }, { 0 } };
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen = NULL;
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("make_moving_max", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_initial_contents = __pyx_optional_args->initial_contents;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_initial_element = __pyx_optional_args->initial_element;
      }
    }
  }
  __Pyx_INCREF(__pyx_v_initial_contents);
/* … */
    values[1] = ((PyObject *)Py_None);
    values[2] = ((PyObject *)__pyx_float_0_0);
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_size)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 3793, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_initial_contents);
          if (value) { values[1] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 3793, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_initial_element);
          if (value) { values[2] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 3793, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "make_moving_max") < 0)) __PYX_ERR(0, 3793, __pyx_L3_error)
      }
    } else {
      switch (__pyx_nargs) {
        case  3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_size = ((PyObject*)values[0]);
    __pyx_v_initial_contents = values[1];
    __pyx_v_initial_element = values[2];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("make_moving_max", 0, 1, 3, __pyx_nargs); __PYX_ERR(0, 3793, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.make_moving_max", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_size), (&PyInt_Type), 0, "size", 1))) __PYX_ERR(0, 3793, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pysndlib_3clm_414make_moving_max(__pyx_self, __pyx_v_size, __pyx_v_initial_contents, __pyx_v_initial_element);
 3795:                 initial_element: Optional[float]=0.0):
 3796:                 
 3797:     """
 3798:     return a new moving-max generator.
 3799:     
 3800:     :param size: max window length \in samples
 3801:     :param initial_contents: initial values
 3802:     :param initial_element: initial element
 3803:     :return: moving_max gen
 3804:     :rtype: mus_any
 3805:     """
 3806: 
+3807:     check_range('size', size, 0.0, None)
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_check_range); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3807, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  __pyx_t_4 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
      __pyx_t_4 = 1;
    }
  }
  {
    PyObject *__pyx_callargs[5] = {__pyx_t_3, __pyx_n_s_size, __pyx_v_size, __pyx_float_0_0, Py_None};
    __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 4+__pyx_t_4);
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3807, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 3808: 
+3809:     cdef double [:] initial_contents_view = None
  __pyx_t_5 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(Py_None, PyBUF_WRITABLE); if (unlikely(!__pyx_t_5.memview)) __PYX_ERR(0, 3809, __pyx_L1_error)
  __pyx_v_initial_contents_view = __pyx_t_5;
  __pyx_t_5.memview = NULL;
  __pyx_t_5.data = NULL;
 3810: 
+3811:     if initial_contents is not None:
  __pyx_t_6 = (__pyx_v_initial_contents != Py_None);
  if (__pyx_t_6) {
/* … */
    goto __pyx_L3;
  }
+3812:         if isinstance(initial_contents, list):
    __pyx_t_6 = PyList_Check(__pyx_v_initial_contents); 
    if (__pyx_t_6) {
/* … */
    }
+3813:             initial_contents = np.array(initial_contents)
      __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3813, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_array); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3813, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_t_2 = NULL;
      __pyx_t_4 = 0;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
        __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
        if (likely(__pyx_t_2)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
          __Pyx_INCREF(__pyx_t_2);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_3, function);
          __pyx_t_4 = 1;
        }
      }
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_v_initial_contents};
        __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4);
        __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
        if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3813, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      }
      __Pyx_DECREF_SET(__pyx_v_initial_contents, __pyx_t_1);
      __pyx_t_1 = 0;
+3814:         check_ndim(initial_contents)
    __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_check_ndim); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3814, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_2 = NULL;
    __pyx_t_4 = 0;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
      __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
      if (likely(__pyx_t_2)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
        __Pyx_INCREF(__pyx_t_2);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_3, function);
        __pyx_t_4 = 1;
      }
    }
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_v_initial_contents};
      __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4);
      __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3814, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    }
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+3815:         initial_contents_view = initial_contents
    __pyx_t_5 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_initial_contents, PyBUF_WRITABLE); if (unlikely(!__pyx_t_5.memview)) __PYX_ERR(0, 3815, __pyx_L1_error)
    __PYX_XCLEAR_MEMVIEW(&__pyx_v_initial_contents_view, 1);
    __pyx_v_initial_contents_view = __pyx_t_5;
    __pyx_t_5.memview = NULL;
    __pyx_t_5.data = NULL;
 3816: 
+3817:     elif initial_element:
  __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_v_initial_element); if (unlikely((__pyx_t_6 < 0))) __PYX_ERR(0, 3817, __pyx_L1_error)
  if (__pyx_t_6) {
/* … */
  }
  __pyx_L3:;
+3818:         initial_contents = np.zeros(size, dtype=np.double)
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3818, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_zeros); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3818, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3818, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_INCREF(__pyx_v_size);
    __Pyx_GIVEREF(__pyx_v_size);
    PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_size);
    __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3818, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_np); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3818, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_double); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 3818, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_dtype, __pyx_t_8) < 0) __PYX_ERR(0, 3818, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 3818, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF_SET(__pyx_v_initial_contents, __pyx_t_8);
    __pyx_t_8 = 0;
+3819:         check_ndim(initial_contents)
    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_check_ndim); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3819, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_1 = NULL;
    __pyx_t_4 = 0;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
      __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_2);
      if (likely(__pyx_t_1)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
        __Pyx_INCREF(__pyx_t_1);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_2, function);
        __pyx_t_4 = 1;
      }
    }
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_1, __pyx_v_initial_contents};
      __pyx_t_8 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4);
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 3819, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    }
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+3820:         initial_contents.fill(initial_element)
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_initial_contents, __pyx_n_s_fill); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3820, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_1 = NULL;
    __pyx_t_4 = 0;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
      __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_2);
      if (likely(__pyx_t_1)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
        __Pyx_INCREF(__pyx_t_1);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_2, function);
        __pyx_t_4 = 1;
      }
    }
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_1, __pyx_v_initial_element};
      __pyx_t_8 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4);
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 3820, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    }
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+3821:         initial_contents_view = initial_contents
    __pyx_t_5 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_initial_contents, PyBUF_WRITABLE); if (unlikely(!__pyx_t_5.memview)) __PYX_ERR(0, 3821, __pyx_L1_error)
    __PYX_XCLEAR_MEMVIEW(&__pyx_v_initial_contents_view, 1);
    __pyx_v_initial_contents_view = __pyx_t_5;
    __pyx_t_5.memview = NULL;
    __pyx_t_5.data = NULL;
+3822:     if initial_contents_view is not None:
  __pyx_t_6 = (((PyObject *) __pyx_v_initial_contents_view.memview) != Py_None);
  if (__pyx_t_6) {
/* … */
    goto __pyx_L5;
  }
+3823:         gen = mus_any.from_ptr(cclm.mus_make_moving_max(size, &initial_contents_view[0]))
    __pyx_t_4 = __Pyx_PyInt_As_int(__pyx_v_size); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 3823, __pyx_L1_error)
    __pyx_t_9 = 0;
    __pyx_t_10 = -1;
    if (__pyx_t_9 < 0) {
      __pyx_t_9 += __pyx_v_initial_contents_view.shape[0];
      if (unlikely(__pyx_t_9 < 0)) __pyx_t_10 = 0;
    } else if (unlikely(__pyx_t_9 >= __pyx_v_initial_contents_view.shape[0])) __pyx_t_10 = 0;
    if (unlikely(__pyx_t_10 != -1)) {
      __Pyx_RaiseBufferIndexError(__pyx_t_10);
      __PYX_ERR(0, 3823, __pyx_L1_error)
    }
    __pyx_t_8 = ((PyObject *)__pyx_vtabptr_8pysndlib_3clm_mus_any->from_ptr(mus_make_moving_max(__pyx_t_4, (&(*((double *) ( /* dim=0 */ (__pyx_v_initial_contents_view.data + __pyx_t_9 * __pyx_v_initial_contents_view.strides[0]) ))))), NULL)); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 3823, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __pyx_v_gen = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)__pyx_t_8);
    __pyx_t_8 = 0;
+3824:         gen.cache_append(initial_contents)
    __pyx_t_8 = ((struct __pyx_vtabstruct_8pysndlib_3clm_mus_any *)__pyx_v_gen->__pyx_vtab)->cache_append(__pyx_v_gen, __pyx_v_initial_contents, 0); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 3824, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 3825:     else:
+3826:         gen = mus_any.from_ptr(cclm.mus_make_moving_max(size, NULL))
  /*else*/ {
    __pyx_t_4 = __Pyx_PyInt_As_int(__pyx_v_size); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 3826, __pyx_L1_error)
    __pyx_t_8 = ((PyObject *)__pyx_vtabptr_8pysndlib_3clm_mus_any->from_ptr(mus_make_moving_max(__pyx_t_4, NULL), NULL)); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 3826, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __pyx_v_gen = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)__pyx_t_8);
    __pyx_t_8 = 0;
  }
  __pyx_L5:;
+3827:     return gen
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __Pyx_INCREF((PyObject *)__pyx_v_gen);
  __pyx_r = __pyx_v_gen;
  goto __pyx_L0;
 3828: 
+3829: cpdef cython.double moving_max(gen: mus_any, insig: float):
static PyObject *__pyx_pw_8pysndlib_3clm_417moving_max(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static double __pyx_f_8pysndlib_3clm_moving_max(struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen, double __pyx_v_insig, CYTHON_UNUSED int __pyx_skip_dispatch) {
  double __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("moving_max", 0);
/* … */
  /* function exit code */
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_417moving_max(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_416moving_max, "\n    moving window max.\n    \n    :param gen: moving_max gen\n    :param insig: input value\n    :rtype: float\n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_417moving_max = {"moving_max", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_417moving_max, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_416moving_max};
static PyObject *__pyx_pw_8pysndlib_3clm_417moving_max(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen = 0;
  double __pyx_v_insig;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("moving_max (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_gen,&__pyx_n_s_insig,0};
    PyObject* values[2] = {0,0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_gen)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 3829, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_insig)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 3829, __pyx_L3_error)
        else {
          __Pyx_RaiseArgtupleInvalid("moving_max", 1, 2, 2, 1); __PYX_ERR(0, 3829, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "moving_max") < 0)) __PYX_ERR(0, 3829, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 2)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
      values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
    }
    __pyx_v_gen = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)values[0]);
    __pyx_v_insig = __pyx_PyFloat_AsDouble(values[1]); if (unlikely((__pyx_v_insig == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 3829, __pyx_L3_error)
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("moving_max", 1, 2, 2, __pyx_nargs); __PYX_ERR(0, 3829, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.moving_max", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_gen), __pyx_ptype_8pysndlib_3clm_mus_any, 0, "gen", 0))) __PYX_ERR(0, 3829, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pysndlib_3clm_416moving_max(__pyx_self, __pyx_v_gen, __pyx_v_insig);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_416moving_max(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen, double __pyx_v_insig) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("moving_max", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_8pysndlib_3clm_moving_max(__pyx_v_gen, __pyx_v_insig, 0); if (unlikely(__pyx_t_1 == ((double)-1) && PyErr_Occurred())) __PYX_ERR(0, 3829, __pyx_L1_error)
  __pyx_t_2 = PyFloat_FromDouble(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3829, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pysndlib.clm.moving_max", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_37 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 3829, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  if (PyDict_SetItem(__pyx_t_37, __pyx_n_s_gen, __pyx_n_s_mus_any) < 0) __PYX_ERR(0, 3829, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_37, __pyx_n_s_insig, __pyx_n_s_float) < 0) __PYX_ERR(0, 3829, __pyx_L1_error)
  __pyx_t_41 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_417moving_max, 0, __pyx_n_s_moving_max, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__441)); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 3829, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_41, __pyx_t_37);
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_moving_max, __pyx_t_41) < 0) __PYX_ERR(0, 3829, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
/* … */
  __pyx_codeobj__441 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__350, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_moving_max, 3829, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__441)) __PYX_ERR(0, 3829, __pyx_L1_error)
 3830:     """
 3831:     moving window max.
 3832:     
 3833:     :param gen: moving_max gen
 3834:     :param insig: input value
 3835:     :rtype: float
 3836:     """
+3837:     return cclm.mus_moving_max(gen._ptr, insig)
  __pyx_r = mus_moving_max(__pyx_v_gen->_ptr, __pyx_v_insig);
  goto __pyx_L0;
 3838: 
+3839: cpdef bint is_moving_max(gen: mus_any):
static PyObject *__pyx_pw_8pysndlib_3clm_419is_moving_max(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static int __pyx_f_8pysndlib_3clm_is_moving_max(struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen, CYTHON_UNUSED int __pyx_skip_dispatch) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_moving_max", 0);
/* … */
  /* function exit code */
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_419is_moving_max(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_418is_moving_max, "\n    returns True if gen is a moving_max.\n    \n    :param gen: gen\n    :rtype: bool\n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_419is_moving_max = {"is_moving_max", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_419is_moving_max, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_418is_moving_max};
static PyObject *__pyx_pw_8pysndlib_3clm_419is_moving_max(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_moving_max (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_gen,0};
    PyObject* values[1] = {0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_gen)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 3839, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "is_moving_max") < 0)) __PYX_ERR(0, 3839, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
    }
    __pyx_v_gen = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)values[0]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("is_moving_max", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 3839, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.is_moving_max", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_gen), __pyx_ptype_8pysndlib_3clm_mus_any, 0, "gen", 0))) __PYX_ERR(0, 3839, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pysndlib_3clm_418is_moving_max(__pyx_self, __pyx_v_gen);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_418is_moving_max(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_moving_max", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_8pysndlib_3clm_is_moving_max(__pyx_v_gen, 0); if (unlikely(__pyx_t_1 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 3839, __pyx_L1_error)
  __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3839, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pysndlib.clm.is_moving_max", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_41 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 3839, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  if (PyDict_SetItem(__pyx_t_41, __pyx_n_s_gen, __pyx_n_s_mus_any) < 0) __PYX_ERR(0, 3839, __pyx_L1_error)
  __pyx_t_37 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_419is_moving_max, 0, __pyx_n_s_is_moving_max, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__442)); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 3839, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_37, __pyx_t_41);
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_is_moving_max, __pyx_t_37) < 0) __PYX_ERR(0, 3839, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
/* … */
  __pyx_codeobj__442 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__46, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_is_moving_max, 3839, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__442)) __PYX_ERR(0, 3839, __pyx_L1_error)
 3840:     """
 3841:     returns True if gen is a moving_max.
 3842:     
 3843:     :param gen: gen
 3844:     :rtype: bool
 3845:     """
+3846:     return cclm.mus_is_moving_max(gen._ptr)
  __pyx_r = mus_is_moving_max(__pyx_v_gen->_ptr);
  goto __pyx_L0;
 3847: 
 3848: # ---------------- moving-norm ---------------- #
+3849: cpdef mus_any make_moving_norm(size: int, initial_contents=None, scaler: Optional[float]=1.):
static PyObject *__pyx_pw_8pysndlib_3clm_421make_moving_norm(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_f_8pysndlib_3clm_make_moving_norm(PyObject *__pyx_v_size, CYTHON_UNUSED int __pyx_skip_dispatch, struct __pyx_opt_args_8pysndlib_3clm_make_moving_norm *__pyx_optional_args) {
  PyObject *__pyx_v_initial_contents = ((PyObject *)Py_None);
  PyObject *__pyx_v_scaler = ((PyObject *)__pyx_float_1_);
  __Pyx_memviewslice __pyx_v_initial_contents_view = { 0, 0, { 0 }, { 0 }, { 0 } };
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen = NULL;
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("make_moving_norm", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_initial_contents = __pyx_optional_args->initial_contents;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_scaler = __pyx_optional_args->scaler;
      }
    }
  }
  __Pyx_INCREF(__pyx_v_initial_contents);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __PYX_XCLEAR_MEMVIEW(&__pyx_t_5, 1);
  __Pyx_AddTraceback("pysndlib.clm.make_moving_norm", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __PYX_XCLEAR_MEMVIEW(&__pyx_v_initial_contents_view, 1);
  __Pyx_XDECREF((PyObject *)__pyx_v_gen);
  __Pyx_XDECREF(__pyx_v_initial_contents);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_421make_moving_norm(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_420make_moving_norm, "\n    return a new moving-norm generator.\n    \n    :param size: averaging length \\in samples\n    :param initial_contents: initial values\n    :param scaler: normalzing value\n    :return: moving_norm gen\n    :rtype: mus_any\n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_421make_moving_norm = {"make_moving_norm", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_421make_moving_norm, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_420make_moving_norm};
static PyObject *__pyx_pw_8pysndlib_3clm_421make_moving_norm(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_size = 0;
  PyObject *__pyx_v_initial_contents = 0;
  PyObject *__pyx_v_scaler = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("make_moving_norm (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_size,&__pyx_n_s_initial_contents,&__pyx_n_s_scaler,0};
    PyObject* values[3] = {0,0,0};
    values[1] = ((PyObject *)Py_None);
    values[2] = ((PyObject *)__pyx_float_1_);
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_size)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 3849, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_initial_contents);
          if (value) { values[1] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 3849, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_scaler);
          if (value) { values[2] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 3849, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "make_moving_norm") < 0)) __PYX_ERR(0, 3849, __pyx_L3_error)
      }
    } else {
      switch (__pyx_nargs) {
        case  3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_size = ((PyObject*)values[0]);
    __pyx_v_initial_contents = values[1];
    __pyx_v_scaler = values[2];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("make_moving_norm", 0, 1, 3, __pyx_nargs); __PYX_ERR(0, 3849, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.make_moving_norm", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_size), (&PyInt_Type), 0, "size", 1))) __PYX_ERR(0, 3849, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pysndlib_3clm_420make_moving_norm(__pyx_self, __pyx_v_size, __pyx_v_initial_contents, __pyx_v_scaler);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_420make_moving_norm(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_size, PyObject *__pyx_v_initial_contents, PyObject *__pyx_v_scaler) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("make_moving_norm", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2.__pyx_n = 2;
  __pyx_t_2.initial_contents = __pyx_v_initial_contents;
  __pyx_t_2.scaler = __pyx_v_scaler;
  __pyx_t_1 = ((PyObject *)__pyx_f_8pysndlib_3clm_make_moving_norm(__pyx_v_size, 0, &__pyx_t_2)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3849, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pysndlib.clm.make_moving_norm", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__443 = PyTuple_Pack(3, __pyx_n_s_size, __pyx_n_s_initial_contents, __pyx_n_s_scaler); if (unlikely(!__pyx_tuple__443)) __PYX_ERR(0, 3849, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__443);
  __Pyx_GIVEREF(__pyx_tuple__443);
  __pyx_codeobj__444 = (PyObject*)__Pyx_PyCode_New(3, 0, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__443, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_make_moving_norm, 3849, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__444)) __PYX_ERR(0, 3849, __pyx_L1_error)
/* … */
  __pyx_t_37 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 3849, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  if (PyDict_SetItem(__pyx_t_37, __pyx_n_s_size, __pyx_n_s_int_2) < 0) __PYX_ERR(0, 3849, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_37, __pyx_n_s_scaler, __pyx_kp_s_Optional_float) < 0) __PYX_ERR(0, 3849, __pyx_L1_error)
  __pyx_t_41 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_421make_moving_norm, 0, __pyx_n_s_make_moving_norm, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__444)); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 3849, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_41, __pyx_tuple__445);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_41, __pyx_t_37);
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_make_moving_norm, __pyx_t_41) < 0) __PYX_ERR(0, 3849, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
  __pyx_tuple__445 = PyTuple_Pack(2, Py_None, __pyx_float_1_); if (unlikely(!__pyx_tuple__445)) __PYX_ERR(0, 3849, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__445);
  __Pyx_GIVEREF(__pyx_tuple__445);
/* … */
struct __pyx_opt_args_8pysndlib_3clm_make_moving_norm {
  int __pyx_n;
  PyObject *initial_contents;
  PyObject *scaler;
};
 3850:     """
 3851:     return a new moving-norm generator.
 3852:     
 3853:     :param size: averaging length \in samples
 3854:     :param initial_contents: initial values
 3855:     :param scaler: normalzing value
 3856:     :return: moving_norm gen
 3857:     :rtype: mus_any
 3858:     """
 3859: 
+3860:     check_range('size', size, 0.0, None)
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_check_range); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3860, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  __pyx_t_4 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
      __pyx_t_4 = 1;
    }
  }
  {
    PyObject *__pyx_callargs[5] = {__pyx_t_3, __pyx_n_s_size, __pyx_v_size, __pyx_float_0_0, Py_None};
    __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 4+__pyx_t_4);
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3860, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 3861: 
+3862:     cdef double [:] initial_contents_view = None
  __pyx_t_5 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(Py_None, PyBUF_WRITABLE); if (unlikely(!__pyx_t_5.memview)) __PYX_ERR(0, 3862, __pyx_L1_error)
  __pyx_v_initial_contents_view = __pyx_t_5;
  __pyx_t_5.memview = NULL;
  __pyx_t_5.data = NULL;
 3863: 
 3864: 
+3865:     if initial_contents is not None:
  __pyx_t_6 = (__pyx_v_initial_contents != Py_None);
  if (__pyx_t_6) {
/* … */
  }
+3866:         if isinstance(initial_contents, list):
    __pyx_t_6 = PyList_Check(__pyx_v_initial_contents); 
    if (__pyx_t_6) {
/* … */
    }
+3867:             initial_contents = np.array(initial_contents)
      __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3867, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_array); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3867, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_t_2 = NULL;
      __pyx_t_4 = 0;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
        __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
        if (likely(__pyx_t_2)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
          __Pyx_INCREF(__pyx_t_2);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_3, function);
          __pyx_t_4 = 1;
        }
      }
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_v_initial_contents};
        __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4);
        __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
        if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3867, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      }
      __Pyx_DECREF_SET(__pyx_v_initial_contents, __pyx_t_1);
      __pyx_t_1 = 0;
+3868:         check_ndim(initial_contents)
    __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_check_ndim); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3868, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_2 = NULL;
    __pyx_t_4 = 0;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
      __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
      if (likely(__pyx_t_2)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
        __Pyx_INCREF(__pyx_t_2);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_3, function);
        __pyx_t_4 = 1;
      }
    }
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_v_initial_contents};
      __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4);
      __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3868, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    }
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+3869:         initial_contents_view = initial_contents
    __pyx_t_5 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_initial_contents, PyBUF_WRITABLE); if (unlikely(!__pyx_t_5.memview)) __PYX_ERR(0, 3869, __pyx_L1_error)
    __PYX_XCLEAR_MEMVIEW(&__pyx_v_initial_contents_view, 1);
    __pyx_v_initial_contents_view = __pyx_t_5;
    __pyx_t_5.memview = NULL;
    __pyx_t_5.data = NULL;
 3870: 
+3871:     if initial_contents_view is not None:
  __pyx_t_6 = (((PyObject *) __pyx_v_initial_contents_view.memview) != Py_None);
  if (__pyx_t_6) {
/* … */
    goto __pyx_L5;
  }
+3872:         gen = mus_any.from_ptr(cclm.mus_make_moving_norm(size, &initial_contents_view[0], scaler))
    __pyx_t_4 = __Pyx_PyInt_As_int(__pyx_v_size); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 3872, __pyx_L1_error)
    __pyx_t_7 = 0;
    __pyx_t_8 = -1;
    if (__pyx_t_7 < 0) {
      __pyx_t_7 += __pyx_v_initial_contents_view.shape[0];
      if (unlikely(__pyx_t_7 < 0)) __pyx_t_8 = 0;
    } else if (unlikely(__pyx_t_7 >= __pyx_v_initial_contents_view.shape[0])) __pyx_t_8 = 0;
    if (unlikely(__pyx_t_8 != -1)) {
      __Pyx_RaiseBufferIndexError(__pyx_t_8);
      __PYX_ERR(0, 3872, __pyx_L1_error)
    }
    __pyx_t_9 = __pyx_PyFloat_AsDouble(__pyx_v_scaler); if (unlikely((__pyx_t_9 == ((mus_float_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 3872, __pyx_L1_error)
    __pyx_t_1 = ((PyObject *)__pyx_vtabptr_8pysndlib_3clm_mus_any->from_ptr(mus_make_moving_norm(__pyx_t_4, (&(*((double *) ( /* dim=0 */ (__pyx_v_initial_contents_view.data + __pyx_t_7 * __pyx_v_initial_contents_view.strides[0]) )))), __pyx_t_9), NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3872, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_v_gen = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)__pyx_t_1);
    __pyx_t_1 = 0;
+3873:         gen.cache_append(initial_contents)
    __pyx_t_1 = ((struct __pyx_vtabstruct_8pysndlib_3clm_mus_any *)__pyx_v_gen->__pyx_vtab)->cache_append(__pyx_v_gen, __pyx_v_initial_contents, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3873, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 3874:     else:
+3875:         gen = mus_any.from_ptr(cclm.mus_make_moving_norm(size, NULL, scaler))
  /*else*/ {
    __pyx_t_4 = __Pyx_PyInt_As_int(__pyx_v_size); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 3875, __pyx_L1_error)
    __pyx_t_9 = __pyx_PyFloat_AsDouble(__pyx_v_scaler); if (unlikely((__pyx_t_9 == ((mus_float_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 3875, __pyx_L1_error)
    __pyx_t_1 = ((PyObject *)__pyx_vtabptr_8pysndlib_3clm_mus_any->from_ptr(mus_make_moving_norm(__pyx_t_4, NULL, __pyx_t_9), NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3875, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_v_gen = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)__pyx_t_1);
    __pyx_t_1 = 0;
  }
  __pyx_L5:;
 3876: 
+3877:     return gen
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __Pyx_INCREF((PyObject *)__pyx_v_gen);
  __pyx_r = __pyx_v_gen;
  goto __pyx_L0;
 3878: 
+3879: cpdef cython.double moving_norm(gen: mus_any, insig: float):
static PyObject *__pyx_pw_8pysndlib_3clm_423moving_norm(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static double __pyx_f_8pysndlib_3clm_moving_norm(struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen, double __pyx_v_insig, CYTHON_UNUSED int __pyx_skip_dispatch) {
  double __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("moving_norm", 0);
/* … */
  /* function exit code */
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_423moving_norm(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_422moving_norm, "\n    moving window norm.\n    \n    :param gen: moving_norm gen\n    :param insig: input value\n    :rtype: float\n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_423moving_norm = {"moving_norm", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_423moving_norm, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_422moving_norm};
static PyObject *__pyx_pw_8pysndlib_3clm_423moving_norm(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen = 0;
  double __pyx_v_insig;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("moving_norm (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_gen,&__pyx_n_s_insig,0};
    PyObject* values[2] = {0,0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_gen)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 3879, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_insig)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 3879, __pyx_L3_error)
        else {
          __Pyx_RaiseArgtupleInvalid("moving_norm", 1, 2, 2, 1); __PYX_ERR(0, 3879, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "moving_norm") < 0)) __PYX_ERR(0, 3879, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 2)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
      values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
    }
    __pyx_v_gen = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)values[0]);
    __pyx_v_insig = __pyx_PyFloat_AsDouble(values[1]); if (unlikely((__pyx_v_insig == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 3879, __pyx_L3_error)
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("moving_norm", 1, 2, 2, __pyx_nargs); __PYX_ERR(0, 3879, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.moving_norm", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_gen), __pyx_ptype_8pysndlib_3clm_mus_any, 0, "gen", 0))) __PYX_ERR(0, 3879, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pysndlib_3clm_422moving_norm(__pyx_self, __pyx_v_gen, __pyx_v_insig);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_422moving_norm(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen, double __pyx_v_insig) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("moving_norm", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_8pysndlib_3clm_moving_norm(__pyx_v_gen, __pyx_v_insig, 0); if (unlikely(__pyx_t_1 == ((double)-1) && PyErr_Occurred())) __PYX_ERR(0, 3879, __pyx_L1_error)
  __pyx_t_2 = PyFloat_FromDouble(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3879, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pysndlib.clm.moving_norm", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_41 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 3879, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  if (PyDict_SetItem(__pyx_t_41, __pyx_n_s_gen, __pyx_n_s_mus_any) < 0) __PYX_ERR(0, 3879, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_41, __pyx_n_s_insig, __pyx_n_s_float) < 0) __PYX_ERR(0, 3879, __pyx_L1_error)
  __pyx_t_37 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_423moving_norm, 0, __pyx_n_s_moving_norm, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__446)); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 3879, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_37, __pyx_t_41);
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_moving_norm, __pyx_t_37) < 0) __PYX_ERR(0, 3879, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
/* … */
  __pyx_codeobj__446 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__350, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_moving_norm, 3879, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__446)) __PYX_ERR(0, 3879, __pyx_L1_error)
 3880:     """
 3881:     moving window norm.
 3882:     
 3883:     :param gen: moving_norm gen
 3884:     :param insig: input value
 3885:     :rtype: float
 3886:     """
+3887:     return cclm.mus_moving_norm(gen._ptr, insig)
  __pyx_r = mus_moving_norm(__pyx_v_gen->_ptr, __pyx_v_insig);
  goto __pyx_L0;
 3888: 
+3889: cpdef is_moving_norm(gen: mus_any):
static PyObject *__pyx_pw_8pysndlib_3clm_425is_moving_norm(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyObject *__pyx_f_8pysndlib_3clm_is_moving_norm(struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen, CYTHON_UNUSED int __pyx_skip_dispatch) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_moving_norm", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pysndlib.clm.is_moving_norm", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_425is_moving_norm(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_424is_moving_norm, "\n    returns True if gen is a moving_norm.\n    \n    :param gen: gen\n    :rtype: bool\n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_425is_moving_norm = {"is_moving_norm", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_425is_moving_norm, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_424is_moving_norm};
static PyObject *__pyx_pw_8pysndlib_3clm_425is_moving_norm(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_moving_norm (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_gen,0};
    PyObject* values[1] = {0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_gen)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 3889, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "is_moving_norm") < 0)) __PYX_ERR(0, 3889, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
    }
    __pyx_v_gen = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)values[0]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("is_moving_norm", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 3889, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.is_moving_norm", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_gen), __pyx_ptype_8pysndlib_3clm_mus_any, 0, "gen", 0))) __PYX_ERR(0, 3889, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pysndlib_3clm_424is_moving_norm(__pyx_self, __pyx_v_gen);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_424is_moving_norm(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_moving_norm", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_8pysndlib_3clm_is_moving_norm(__pyx_v_gen, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3889, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pysndlib.clm.is_moving_norm", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_37 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 3889, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  if (PyDict_SetItem(__pyx_t_37, __pyx_n_s_gen, __pyx_n_s_mus_any) < 0) __PYX_ERR(0, 3889, __pyx_L1_error)
  __pyx_t_41 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_425is_moving_norm, 0, __pyx_n_s_is_moving_norm, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__447)); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 3889, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_41, __pyx_t_37);
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_is_moving_norm, __pyx_t_41) < 0) __PYX_ERR(0, 3889, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
/* … */
  __pyx_codeobj__447 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__46, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_is_moving_norm, 3889, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__447)) __PYX_ERR(0, 3889, __pyx_L1_error)
 3890:     """
 3891:     returns True if gen is a moving_norm.
 3892:     
 3893:     :param gen: gen
 3894:     :rtype: bool
 3895:     """
+3896:     return cclm.mus_is_moving_norm(gen._ptr)
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyBool_FromLong(mus_is_moving_norm(__pyx_v_gen->_ptr)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3896, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 3897: 
 3898: 
 3899: # ---------------- asymmetric-fm ---------------- #
+3900: cpdef mus_any make_asymmetric_fm(frequency: float, initial_phase: Optional[float]=0.0, r: Optional[float]=1.0, ratio: Optional[float]=1.):
static PyObject *__pyx_pw_8pysndlib_3clm_427make_asymmetric_fm(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_f_8pysndlib_3clm_make_asymmetric_fm(double __pyx_v_frequency, CYTHON_UNUSED int __pyx_skip_dispatch, struct __pyx_opt_args_8pysndlib_3clm_make_asymmetric_fm *__pyx_optional_args) {
  PyObject *__pyx_v_initial_phase = ((PyObject *)__pyx_float_0_0);
  PyObject *__pyx_v_r = ((PyObject *)__pyx_float_1_0);
  PyObject *__pyx_v_ratio = ((PyObject *)__pyx_float_1_);
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("make_asymmetric_fm", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_initial_phase = __pyx_optional_args->initial_phase;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_r = __pyx_optional_args->r;
        if (__pyx_optional_args->__pyx_n > 2) {
          __pyx_v_ratio = __pyx_optional_args->ratio;
        }
      }
    }
  }
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("pysndlib.clm.make_asymmetric_fm", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_427make_asymmetric_fm(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_426make_asymmetric_fm, "\n    return a new asymmetric_fm generator.\n    \n    :param frequency: frequency of gen\n    :param initial_phase: starting phase of gen, \\in radians\n    :param r: amplitude ratio between successive sidebands\n    :param ratio: ratio between carrier and sideband spacing\n    :return: asymmetric_fm gen\n    :rtype: mus_any\n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_427make_asymmetric_fm = {"make_asymmetric_fm", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_427make_asymmetric_fm, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_426make_asymmetric_fm};
static PyObject *__pyx_pw_8pysndlib_3clm_427make_asymmetric_fm(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  double __pyx_v_frequency;
  PyObject *__pyx_v_initial_phase = 0;
  PyObject *__pyx_v_r = 0;
  PyObject *__pyx_v_ratio = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("make_asymmetric_fm (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_frequency,&__pyx_n_s_initial_phase,&__pyx_n_s_r,&__pyx_n_s_ratio,0};
    PyObject* values[4] = {0,0,0,0};
    values[1] = ((PyObject *)__pyx_float_0_0);
    values[2] = ((PyObject *)__pyx_float_1_0);
    values[3] = ((PyObject *)__pyx_float_1_);
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  4: values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_frequency)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 3900, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_initial_phase);
          if (value) { values[1] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 3900, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_r);
          if (value) { values[2] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 3900, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_ratio);
          if (value) { values[3] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 3900, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "make_asymmetric_fm") < 0)) __PYX_ERR(0, 3900, __pyx_L3_error)
      }
    } else {
      switch (__pyx_nargs) {
        case  4: values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_frequency = __pyx_PyFloat_AsDouble(values[0]); if (unlikely((__pyx_v_frequency == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 3900, __pyx_L3_error)
    __pyx_v_initial_phase = values[1];
    __pyx_v_r = values[2];
    __pyx_v_ratio = values[3];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("make_asymmetric_fm", 0, 1, 4, __pyx_nargs); __PYX_ERR(0, 3900, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.make_asymmetric_fm", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pysndlib_3clm_426make_asymmetric_fm(__pyx_self, __pyx_v_frequency, __pyx_v_initial_phase, __pyx_v_r, __pyx_v_ratio);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_426make_asymmetric_fm(CYTHON_UNUSED PyObject *__pyx_self, double __pyx_v_frequency, PyObject *__pyx_v_initial_phase, PyObject *__pyx_v_r, PyObject *__pyx_v_ratio) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("make_asymmetric_fm", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2.__pyx_n = 3;
  __pyx_t_2.initial_phase = __pyx_v_initial_phase;
  __pyx_t_2.r = __pyx_v_r;
  __pyx_t_2.ratio = __pyx_v_ratio;
  __pyx_t_1 = ((PyObject *)__pyx_f_8pysndlib_3clm_make_asymmetric_fm(__pyx_v_frequency, 0, &__pyx_t_2)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3900, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pysndlib.clm.make_asymmetric_fm", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__448 = PyTuple_Pack(4, __pyx_n_s_frequency, __pyx_n_s_initial_phase, __pyx_n_s_r, __pyx_n_s_ratio); if (unlikely(!__pyx_tuple__448)) __PYX_ERR(0, 3900, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__448);
  __Pyx_GIVEREF(__pyx_tuple__448);
  __pyx_codeobj__449 = (PyObject*)__Pyx_PyCode_New(4, 0, 0, 4, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__448, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_make_asymmetric_fm, 3900, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__449)) __PYX_ERR(0, 3900, __pyx_L1_error)
/* … */
  __pyx_t_41 = __Pyx_PyDict_NewPresized(4); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 3900, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  if (PyDict_SetItem(__pyx_t_41, __pyx_n_s_frequency, __pyx_n_s_float) < 0) __PYX_ERR(0, 3900, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_41, __pyx_n_s_initial_phase, __pyx_kp_s_Optional_float) < 0) __PYX_ERR(0, 3900, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_41, __pyx_n_s_r, __pyx_kp_s_Optional_float) < 0) __PYX_ERR(0, 3900, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_41, __pyx_n_s_ratio, __pyx_kp_s_Optional_float) < 0) __PYX_ERR(0, 3900, __pyx_L1_error)
  __pyx_t_37 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_427make_asymmetric_fm, 0, __pyx_n_s_make_asymmetric_fm, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__449)); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 3900, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_37, __pyx_tuple__450);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_37, __pyx_t_41);
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_make_asymmetric_fm, __pyx_t_37) < 0) __PYX_ERR(0, 3900, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
  __pyx_tuple__450 = PyTuple_Pack(3, __pyx_float_0_0, __pyx_float_1_0, __pyx_float_1_); if (unlikely(!__pyx_tuple__450)) __PYX_ERR(0, 3900, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__450);
  __Pyx_GIVEREF(__pyx_tuple__450);
/* … */
struct __pyx_opt_args_8pysndlib_3clm_make_asymmetric_fm {
  int __pyx_n;
  PyObject *initial_phase;
  PyObject *r;
  PyObject *ratio;
};
 3901:     """
 3902:     return a new asymmetric_fm generator.
 3903:     
 3904:     :param frequency: frequency of gen
 3905:     :param initial_phase: starting phase of gen, \in radians
 3906:     :param r: amplitude ratio between successive sidebands
 3907:     :param ratio: ratio between carrier and sideband spacing
 3908:     :return: asymmetric_fm gen
 3909:     :rtype: mus_any
 3910:     """
 3911: 
+3912:     check_range('frequency', frequency, 0.0, None)
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_check_range); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3912, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = PyFloat_FromDouble(__pyx_v_frequency); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3912, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = NULL;
  __pyx_t_5 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_4)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_4);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
      __pyx_t_5 = 1;
    }
  }
  {
    PyObject *__pyx_callargs[5] = {__pyx_t_4, __pyx_n_s_frequency, __pyx_t_3, __pyx_float_0_0, Py_None};
    __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_5, 4+__pyx_t_5);
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3912, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 3913: 
+3914:     return mus_any.from_ptr(cclm.mus_make_asymmetric_fm(frequency, initial_phase, r, ratio))
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __pyx_t_6 = __pyx_PyFloat_AsDouble(__pyx_v_initial_phase); if (unlikely((__pyx_t_6 == ((mus_float_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 3914, __pyx_L1_error)
  __pyx_t_7 = __pyx_PyFloat_AsDouble(__pyx_v_r); if (unlikely((__pyx_t_7 == ((mus_float_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 3914, __pyx_L1_error)
  __pyx_t_8 = __pyx_PyFloat_AsDouble(__pyx_v_ratio); if (unlikely((__pyx_t_8 == ((mus_float_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 3914, __pyx_L1_error)
  __pyx_t_1 = ((PyObject *)__pyx_vtabptr_8pysndlib_3clm_mus_any->from_ptr(mus_make_asymmetric_fm(__pyx_v_frequency, __pyx_t_6, __pyx_t_7, __pyx_t_8), NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3914, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)__pyx_t_1);
  __pyx_t_1 = 0;
  goto __pyx_L0;
 3915: 
+3916: cpdef cython.double asymmetric_fm(gen: mus_any, index: float, fm: Optional[float]=None):
static PyObject *__pyx_pw_8pysndlib_3clm_429asymmetric_fm(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static double __pyx_f_8pysndlib_3clm_asymmetric_fm(struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen, double __pyx_v_index, CYTHON_UNUSED int __pyx_skip_dispatch, struct __pyx_opt_args_8pysndlib_3clm_asymmetric_fm *__pyx_optional_args) {
  PyObject *__pyx_v_fm = ((PyObject *)Py_None);
  double __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("asymmetric_fm", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_fm = __pyx_optional_args->fm;
    }
  }
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("pysndlib.clm.asymmetric_fm", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_429asymmetric_fm(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_428asymmetric_fm, "\n    next sample from asymmetric fm generator.  \n       \n    :param gen: asymmetric_fm gen\n    :param index: fm index\n    :param fm: fm input\n    :rtype: float\n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_429asymmetric_fm = {"asymmetric_fm", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_429asymmetric_fm, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_428asymmetric_fm};
static PyObject *__pyx_pw_8pysndlib_3clm_429asymmetric_fm(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen = 0;
  double __pyx_v_index;
  PyObject *__pyx_v_fm = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("asymmetric_fm (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_gen,&__pyx_n_s_index,&__pyx_n_s_fm,0};
    PyObject* values[3] = {0,0,0};
    values[2] = ((PyObject *)Py_None);
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_gen)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 3916, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_index)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 3916, __pyx_L3_error)
        else {
          __Pyx_RaiseArgtupleInvalid("asymmetric_fm", 0, 2, 3, 1); __PYX_ERR(0, 3916, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_fm);
          if (value) { values[2] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 3916, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "asymmetric_fm") < 0)) __PYX_ERR(0, 3916, __pyx_L3_error)
      }
    } else {
      switch (__pyx_nargs) {
        case  3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_gen = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)values[0]);
    __pyx_v_index = __pyx_PyFloat_AsDouble(values[1]); if (unlikely((__pyx_v_index == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 3916, __pyx_L3_error)
    __pyx_v_fm = values[2];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("asymmetric_fm", 0, 2, 3, __pyx_nargs); __PYX_ERR(0, 3916, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.asymmetric_fm", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_gen), __pyx_ptype_8pysndlib_3clm_mus_any, 0, "gen", 0))) __PYX_ERR(0, 3916, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pysndlib_3clm_428asymmetric_fm(__pyx_self, __pyx_v_gen, __pyx_v_index, __pyx_v_fm);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_428asymmetric_fm(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen, double __pyx_v_index, PyObject *__pyx_v_fm) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("asymmetric_fm", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2.__pyx_n = 1;
  __pyx_t_2.fm = __pyx_v_fm;
  __pyx_t_1 = __pyx_f_8pysndlib_3clm_asymmetric_fm(__pyx_v_gen, __pyx_v_index, 0, &__pyx_t_2); if (unlikely(__pyx_t_1 == ((double)-1) && PyErr_Occurred())) __PYX_ERR(0, 3916, __pyx_L1_error)
  __pyx_t_3 = PyFloat_FromDouble(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3916, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_r = __pyx_t_3;
  __pyx_t_3 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("pysndlib.clm.asymmetric_fm", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_37 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 3916, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  if (PyDict_SetItem(__pyx_t_37, __pyx_n_s_gen, __pyx_n_s_mus_any) < 0) __PYX_ERR(0, 3916, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_37, __pyx_n_s_index, __pyx_n_s_float) < 0) __PYX_ERR(0, 3916, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_37, __pyx_n_s_fm, __pyx_kp_s_Optional_float) < 0) __PYX_ERR(0, 3916, __pyx_L1_error)
  __pyx_t_41 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_429asymmetric_fm, 0, __pyx_n_s_asymmetric_fm, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__451)); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 3916, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_41, __pyx_tuple__258);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_41, __pyx_t_37);
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_asymmetric_fm, __pyx_t_41) < 0) __PYX_ERR(0, 3916, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
/* … */
  __pyx_codeobj__451 = (PyObject*)__Pyx_PyCode_New(3, 0, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__272, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_asymmetric_fm, 3916, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__451)) __PYX_ERR(0, 3916, __pyx_L1_error)
/* … */
struct __pyx_opt_args_8pysndlib_3clm_asymmetric_fm {
  int __pyx_n;
  PyObject *fm;
};
 3917:     """
 3918:     next sample from asymmetric fm generator.  
 3919:        
 3920:     :param gen: asymmetric_fm gen
 3921:     :param index: fm index
 3922:     :param fm: fm input
 3923:     :rtype: float
 3924:     """
+3925:     if fm:
  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_fm); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 3925, __pyx_L1_error)
  if (__pyx_t_1) {
/* … */
  }
+3926:         return cclm.mus_asymmetric_fm(gen._ptr, index, fm)
    __pyx_t_2 = __pyx_PyFloat_AsDouble(__pyx_v_fm); if (unlikely((__pyx_t_2 == ((mus_float_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 3926, __pyx_L1_error)
    __pyx_r = mus_asymmetric_fm(__pyx_v_gen->_ptr, __pyx_v_index, __pyx_t_2);
    goto __pyx_L0;
 3927:     else:
+3928:         return cclm.mus_asymmetric_fm_unmodulated(gen._ptr, index)
  /*else*/ {
    __pyx_r = mus_asymmetric_fm_unmodulated(__pyx_v_gen->_ptr, __pyx_v_index);
    goto __pyx_L0;
  }
 3929: 
+3930: cpdef bint is_asymmetric_fm(gen: mus_any):
static PyObject *__pyx_pw_8pysndlib_3clm_431is_asymmetric_fm(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static int __pyx_f_8pysndlib_3clm_is_asymmetric_fm(struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen, CYTHON_UNUSED int __pyx_skip_dispatch) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_asymmetric_fm", 0);
/* … */
  /* function exit code */
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_431is_asymmetric_fm(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_430is_asymmetric_fm, "\n    returns True if gen is a asymmetric_fm.\n    \n    :param gen: gen\n    :rtype: bool\n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_431is_asymmetric_fm = {"is_asymmetric_fm", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_431is_asymmetric_fm, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_430is_asymmetric_fm};
static PyObject *__pyx_pw_8pysndlib_3clm_431is_asymmetric_fm(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_asymmetric_fm (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_gen,0};
    PyObject* values[1] = {0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_gen)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 3930, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "is_asymmetric_fm") < 0)) __PYX_ERR(0, 3930, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
    }
    __pyx_v_gen = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)values[0]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("is_asymmetric_fm", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 3930, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.is_asymmetric_fm", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_gen), __pyx_ptype_8pysndlib_3clm_mus_any, 0, "gen", 0))) __PYX_ERR(0, 3930, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pysndlib_3clm_430is_asymmetric_fm(__pyx_self, __pyx_v_gen);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_430is_asymmetric_fm(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_asymmetric_fm", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_8pysndlib_3clm_is_asymmetric_fm(__pyx_v_gen, 0); if (unlikely(__pyx_t_1 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 3930, __pyx_L1_error)
  __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3930, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pysndlib.clm.is_asymmetric_fm", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_41 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 3930, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  if (PyDict_SetItem(__pyx_t_41, __pyx_n_s_gen, __pyx_n_s_mus_any) < 0) __PYX_ERR(0, 3930, __pyx_L1_error)
  __pyx_t_37 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_431is_asymmetric_fm, 0, __pyx_n_s_is_asymmetric_fm, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__452)); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 3930, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_37, __pyx_t_41);
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_is_asymmetric_fm, __pyx_t_37) < 0) __PYX_ERR(0, 3930, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
/* … */
  __pyx_codeobj__452 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__46, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_is_asymmetric_fm, 3930, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__452)) __PYX_ERR(0, 3930, __pyx_L1_error)
 3931:     """
 3932:     returns True if gen is a asymmetric_fm.
 3933:     
 3934:     :param gen: gen
 3935:     :rtype: bool
 3936:     """
+3937:     return cclm.mus_is_asymmetric_fm(gen._ptr)
  __pyx_r = mus_is_asymmetric_fm(__pyx_v_gen->_ptr);
  goto __pyx_L0;
 3938: 
 3939: # ---------------- file-to-sample ---------------- #
+3940: cpdef mus_any make_file2sample(filename, buffer_size: Optional[int]=None):
static PyObject *__pyx_pw_8pysndlib_3clm_433make_file2sample(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_f_8pysndlib_3clm_make_file2sample(PyObject *__pyx_v_filename, CYTHON_UNUSED int __pyx_skip_dispatch, struct __pyx_opt_args_8pysndlib_3clm_make_file2sample *__pyx_optional_args) {
  PyObject *__pyx_v_buffer_size = ((PyObject *)Py_None);
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("make_file2sample", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_buffer_size = __pyx_optional_args->buffer_size;
    }
  }
  __Pyx_INCREF(__pyx_v_buffer_size);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("pysndlib.clm.make_file2sample", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_buffer_size);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_433make_file2sample(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_432make_file2sample, "\n    return an input generator reading 'filename' (a sound file).\n    \n    :param filename: name of file to read\n    :param buffer_size: io buffer size\n    :return: file2sample gen\n    :rtype: mus_any\n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_433make_file2sample = {"make_file2sample", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_433make_file2sample, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_432make_file2sample};
static PyObject *__pyx_pw_8pysndlib_3clm_433make_file2sample(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_filename = 0;
  PyObject *__pyx_v_buffer_size = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("make_file2sample (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_filename,&__pyx_n_s_buffer_size,0};
    PyObject* values[2] = {0,0};
    values[1] = ((PyObject *)Py_None);
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_filename)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 3940, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_buffer_size);
          if (value) { values[1] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 3940, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "make_file2sample") < 0)) __PYX_ERR(0, 3940, __pyx_L3_error)
      }
    } else {
      switch (__pyx_nargs) {
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_filename = values[0];
    __pyx_v_buffer_size = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("make_file2sample", 0, 1, 2, __pyx_nargs); __PYX_ERR(0, 3940, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.make_file2sample", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pysndlib_3clm_432make_file2sample(__pyx_self, __pyx_v_filename, __pyx_v_buffer_size);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_432make_file2sample(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_filename, PyObject *__pyx_v_buffer_size) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("make_file2sample", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2.__pyx_n = 1;
  __pyx_t_2.buffer_size = __pyx_v_buffer_size;
  __pyx_t_1 = ((PyObject *)__pyx_f_8pysndlib_3clm_make_file2sample(__pyx_v_filename, 0, &__pyx_t_2)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3940, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pysndlib.clm.make_file2sample", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__453 = PyTuple_Pack(2, __pyx_n_s_filename, __pyx_n_s_buffer_size); if (unlikely(!__pyx_tuple__453)) __PYX_ERR(0, 3940, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__453);
  __Pyx_GIVEREF(__pyx_tuple__453);
/* … */
  __pyx_t_37 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 3940, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  if (PyDict_SetItem(__pyx_t_37, __pyx_n_s_buffer_size, __pyx_kp_s_Optional_int) < 0) __PYX_ERR(0, 3940, __pyx_L1_error)
  __pyx_t_41 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_433make_file2sample, 0, __pyx_n_s_make_file2sample, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__454)); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 3940, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_41, __pyx_tuple__258);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_41, __pyx_t_37);
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_make_file2sample, __pyx_t_41) < 0) __PYX_ERR(0, 3940, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
  __pyx_codeobj__454 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__453, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_make_file2sample, 3940, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__454)) __PYX_ERR(0, 3940, __pyx_L1_error)
/* … */
struct __pyx_opt_args_8pysndlib_3clm_make_file2sample {
  int __pyx_n;
  PyObject *buffer_size;
};
 3941:     """
 3942:     return an input generator reading 'filename' (a sound file).
 3943:     
 3944:     :param filename: name of file to read
 3945:     :param buffer_size: io buffer size
 3946:     :return: file2sample gen
 3947:     :rtype: mus_any
 3948:     """
+3949:     buffer_size = buffer_size or CLM.buffer_size
  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_buffer_size); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 3949, __pyx_L1_error)
  if (!__pyx_t_2) {
  } else {
    __Pyx_INCREF(__pyx_v_buffer_size);
    __pyx_t_1 = __pyx_v_buffer_size;
    goto __pyx_L3_bool_binop_done;
  }
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_CLM); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3949, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_buffer_size); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3949, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_INCREF(__pyx_t_4);
  __pyx_t_1 = __pyx_t_4;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_L3_bool_binop_done:;
  __Pyx_DECREF_SET(__pyx_v_buffer_size, __pyx_t_1);
  __pyx_t_1 = 0;
+3950:     return mus_any.from_ptr(cclm.mus_make_file_to_sample_with_buffer_size(filename, buffer_size))
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __pyx_t_5 = __Pyx_PyObject_AsString(__pyx_v_filename); if (unlikely((!__pyx_t_5) && PyErr_Occurred())) __PYX_ERR(0, 3950, __pyx_L1_error)
  __pyx_t_6 = __Pyx_PyInt_As_mus_long_t(__pyx_v_buffer_size); if (unlikely((__pyx_t_6 == ((mus_long_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 3950, __pyx_L1_error)
  __pyx_t_1 = ((PyObject *)__pyx_vtabptr_8pysndlib_3clm_mus_any->from_ptr(mus_make_file_to_sample_with_buffer_size(__pyx_t_5, __pyx_t_6), NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3950, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)__pyx_t_1);
  __pyx_t_1 = 0;
  goto __pyx_L0;
 3951: 
+3952: cpdef cython.double file2sample(gen: mus_any, loc: int, chan: Optional[int]=0):
static PyObject *__pyx_pw_8pysndlib_3clm_435file2sample(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static double __pyx_f_8pysndlib_3clm_file2sample(struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen, PyObject *__pyx_v_loc, CYTHON_UNUSED int __pyx_skip_dispatch, struct __pyx_opt_args_8pysndlib_3clm_file2sample *__pyx_optional_args) {
  PyObject *__pyx_v_chan = ((PyObject *)__pyx_int_0);
  double __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("file2sample", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_chan = __pyx_optional_args->chan;
    }
  }
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("pysndlib.clm.file2sample", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_435file2sample(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_434file2sample, "\n    sample value \\in sound file read by 'obj' \\in channel chan at sample.\n    \n    :param gen: file2sample gen\n    :param loc: location \\in file to read\n    :param chan: channel to read\n    :rtype: float\n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_435file2sample = {"file2sample", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_435file2sample, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_434file2sample};
static PyObject *__pyx_pw_8pysndlib_3clm_435file2sample(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen = 0;
  PyObject *__pyx_v_loc = 0;
  PyObject *__pyx_v_chan = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("file2sample (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_gen,&__pyx_n_s_loc,&__pyx_n_s_chan,0};
    PyObject* values[3] = {0,0,0};
    values[2] = ((PyObject *)__pyx_int_0);
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_gen)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 3952, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_loc)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 3952, __pyx_L3_error)
        else {
          __Pyx_RaiseArgtupleInvalid("file2sample", 0, 2, 3, 1); __PYX_ERR(0, 3952, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_chan);
          if (value) { values[2] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 3952, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "file2sample") < 0)) __PYX_ERR(0, 3952, __pyx_L3_error)
      }
    } else {
      switch (__pyx_nargs) {
        case  3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_gen = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)values[0]);
    __pyx_v_loc = ((PyObject*)values[1]);
    __pyx_v_chan = values[2];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("file2sample", 0, 2, 3, __pyx_nargs); __PYX_ERR(0, 3952, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.file2sample", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_gen), __pyx_ptype_8pysndlib_3clm_mus_any, 0, "gen", 0))) __PYX_ERR(0, 3952, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_loc), (&PyInt_Type), 0, "loc", 1))) __PYX_ERR(0, 3952, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pysndlib_3clm_434file2sample(__pyx_self, __pyx_v_gen, __pyx_v_loc, __pyx_v_chan);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_434file2sample(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen, PyObject *__pyx_v_loc, PyObject *__pyx_v_chan) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("file2sample", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2.__pyx_n = 1;
  __pyx_t_2.chan = __pyx_v_chan;
  __pyx_t_1 = __pyx_f_8pysndlib_3clm_file2sample(__pyx_v_gen, __pyx_v_loc, 0, &__pyx_t_2); if (unlikely(__pyx_t_1 == ((double)-1) && PyErr_Occurred())) __PYX_ERR(0, 3952, __pyx_L1_error)
  __pyx_t_3 = PyFloat_FromDouble(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3952, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_r = __pyx_t_3;
  __pyx_t_3 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("pysndlib.clm.file2sample", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__455 = PyTuple_Pack(3, __pyx_n_s_gen, __pyx_n_s_loc, __pyx_n_s_chan); if (unlikely(!__pyx_tuple__455)) __PYX_ERR(0, 3952, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__455);
  __Pyx_GIVEREF(__pyx_tuple__455);
  __pyx_codeobj__456 = (PyObject*)__Pyx_PyCode_New(3, 0, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__455, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_file2sample, 3952, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__456)) __PYX_ERR(0, 3952, __pyx_L1_error)
/* … */
  __pyx_t_41 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 3952, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  if (PyDict_SetItem(__pyx_t_41, __pyx_n_s_gen, __pyx_n_s_mus_any) < 0) __PYX_ERR(0, 3952, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_41, __pyx_n_s_loc, __pyx_n_s_int_2) < 0) __PYX_ERR(0, 3952, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_41, __pyx_n_s_chan, __pyx_kp_s_Optional_int) < 0) __PYX_ERR(0, 3952, __pyx_L1_error)
  __pyx_t_37 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_435file2sample, 0, __pyx_n_s_file2sample, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__456)); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 3952, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_37, __pyx_tuple__457);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_37, __pyx_t_41);
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_file2sample, __pyx_t_37) < 0) __PYX_ERR(0, 3952, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
  __pyx_tuple__457 = PyTuple_Pack(1, __pyx_int_0); if (unlikely(!__pyx_tuple__457)) __PYX_ERR(0, 3952, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__457);
  __Pyx_GIVEREF(__pyx_tuple__457);
/* … */
struct __pyx_opt_args_8pysndlib_3clm_file2sample {
  int __pyx_n;
  PyObject *chan;
};
 3953:     """
 3954:     sample value \in sound file read by 'obj' \in channel chan at sample.
 3955:     
 3956:     :param gen: file2sample gen
 3957:     :param loc: location \in file to read
 3958:     :param chan: channel to read
 3959:     :rtype: float
 3960:     """
+3961:     return cclm.mus_file_to_sample(gen._ptr, loc, chan)
  __pyx_t_1 = __Pyx_PyInt_As_mus_long_t(__pyx_v_loc); if (unlikely((__pyx_t_1 == ((mus_long_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 3961, __pyx_L1_error)
  __pyx_t_2 = __Pyx_PyInt_As_int(__pyx_v_chan); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 3961, __pyx_L1_error)
  __pyx_r = mus_file_to_sample(__pyx_v_gen->_ptr, __pyx_t_1, __pyx_t_2);
  goto __pyx_L0;
 3962: 
+3963: cpdef bint is_file2sample(gen: mus_any):
static PyObject *__pyx_pw_8pysndlib_3clm_437is_file2sample(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static int __pyx_f_8pysndlib_3clm_is_file2sample(struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen, CYTHON_UNUSED int __pyx_skip_dispatch) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_file2sample", 0);
/* … */
  /* function exit code */
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_437is_file2sample(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_436is_file2sample, "\n    returns True if gen is a file2sample.\n    \n    :param gen: gen\n    :rtype: bool\n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_437is_file2sample = {"is_file2sample", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_437is_file2sample, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_436is_file2sample};
static PyObject *__pyx_pw_8pysndlib_3clm_437is_file2sample(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_file2sample (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_gen,0};
    PyObject* values[1] = {0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_gen)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 3963, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "is_file2sample") < 0)) __PYX_ERR(0, 3963, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
    }
    __pyx_v_gen = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)values[0]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("is_file2sample", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 3963, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.is_file2sample", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_gen), __pyx_ptype_8pysndlib_3clm_mus_any, 0, "gen", 0))) __PYX_ERR(0, 3963, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pysndlib_3clm_436is_file2sample(__pyx_self, __pyx_v_gen);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_436is_file2sample(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_file2sample", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_8pysndlib_3clm_is_file2sample(__pyx_v_gen, 0); if (unlikely(__pyx_t_1 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 3963, __pyx_L1_error)
  __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3963, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pysndlib.clm.is_file2sample", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_37 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 3963, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  if (PyDict_SetItem(__pyx_t_37, __pyx_n_s_gen, __pyx_n_s_mus_any) < 0) __PYX_ERR(0, 3963, __pyx_L1_error)
  __pyx_t_41 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_437is_file2sample, 0, __pyx_n_s_is_file2sample, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__458)); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 3963, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_41, __pyx_t_37);
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_is_file2sample, __pyx_t_41) < 0) __PYX_ERR(0, 3963, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
/* … */
  __pyx_codeobj__458 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__46, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_is_file2sample, 3963, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__458)) __PYX_ERR(0, 3963, __pyx_L1_error)
 3964:     """
 3965:     returns True if gen is a file2sample.
 3966:     
 3967:     :param gen: gen
 3968:     :rtype: bool
 3969:     """
+3970:     return cclm.mus_is_file_to_sample(gen._ptr)
  __pyx_r = mus_is_file_to_sample(__pyx_v_gen->_ptr);
  goto __pyx_L0;
 3971: 
 3972: # ---------------- sample-to-file ---------------- #
+3973: cpdef mus_any make_sample2file(filename, chans: Optional[int]=1, sample_type: Optional[Sample]=None, header_type: Optional[Header]=None, comment: Optional[str]=None):
static PyObject *__pyx_pw_8pysndlib_3clm_439make_sample2file(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_f_8pysndlib_3clm_make_sample2file(PyObject *__pyx_v_filename, CYTHON_UNUSED int __pyx_skip_dispatch, struct __pyx_opt_args_8pysndlib_3clm_make_sample2file *__pyx_optional_args) {
  PyObject *__pyx_v_chans = ((PyObject *)__pyx_int_1);
  PyObject *__pyx_v_sample_type = ((PyObject *)Py_None);
  PyObject *__pyx_v_header_type = ((PyObject *)Py_None);
  PyObject *__pyx_v_comment = ((PyObject *)Py_None);
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("make_sample2file", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_chans = __pyx_optional_args->chans;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_sample_type = __pyx_optional_args->sample_type;
        if (__pyx_optional_args->__pyx_n > 2) {
          __pyx_v_header_type = __pyx_optional_args->header_type;
          if (__pyx_optional_args->__pyx_n > 3) {
            __pyx_v_comment = __pyx_optional_args->comment;
          }
        }
      }
    }
  }
  __Pyx_INCREF(__pyx_v_sample_type);
  __Pyx_INCREF(__pyx_v_header_type);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("pysndlib.clm.make_sample2file", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_sample_type);
  __Pyx_XDECREF(__pyx_v_header_type);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_439make_sample2file(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_438make_sample2file, "\n    return an output generator writing the sound file 'filename' which is set up to have chans'\n    channels of 'sample_type' samples with a header of 'header_type'.  the latter should be sndlib\n    identifiers.\n    \n    :param filename: name of file to write\n    :param chans: number of channels\n    :param sample_type: sample type of file\n    :param header_type: header type of file\n    :return: sample2file gen\n    :rtype: mus_any\n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_439make_sample2file = {"make_sample2file", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_439make_sample2file, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_438make_sample2file};
static PyObject *__pyx_pw_8pysndlib_3clm_439make_sample2file(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_filename = 0;
  PyObject *__pyx_v_chans = 0;
  PyObject *__pyx_v_sample_type = 0;
  PyObject *__pyx_v_header_type = 0;
  PyObject *__pyx_v_comment = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("make_sample2file (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_filename,&__pyx_n_s_chans,&__pyx_n_s_sample_type,&__pyx_n_s_header_type,&__pyx_n_s_comment,0};
    PyObject* values[5] = {0,0,0,0,0};
    values[1] = ((PyObject *)__pyx_int_1);
    values[2] = ((PyObject *)Py_None);
    values[3] = ((PyObject *)Py_None);
    values[4] = ((PyObject *)Py_None);
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  5: values[4] = __Pyx_Arg_FASTCALL(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_filename)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 3973, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_chans);
          if (value) { values[1] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 3973, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_sample_type);
          if (value) { values[2] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 3973, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_header_type);
          if (value) { values[3] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 3973, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_comment);
          if (value) { values[4] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 3973, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "make_sample2file") < 0)) __PYX_ERR(0, 3973, __pyx_L3_error)
      }
    } else {
      switch (__pyx_nargs) {
        case  5: values[4] = __Pyx_Arg_FASTCALL(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_filename = values[0];
    __pyx_v_chans = values[1];
    __pyx_v_sample_type = values[2];
    __pyx_v_header_type = values[3];
    __pyx_v_comment = values[4];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("make_sample2file", 0, 1, 5, __pyx_nargs); __PYX_ERR(0, 3973, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.make_sample2file", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pysndlib_3clm_438make_sample2file(__pyx_self, __pyx_v_filename, __pyx_v_chans, __pyx_v_sample_type, __pyx_v_header_type, __pyx_v_comment);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_438make_sample2file(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_filename, PyObject *__pyx_v_chans, PyObject *__pyx_v_sample_type, PyObject *__pyx_v_header_type, PyObject *__pyx_v_comment) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("make_sample2file", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2.__pyx_n = 4;
  __pyx_t_2.chans = __pyx_v_chans;
  __pyx_t_2.sample_type = __pyx_v_sample_type;
  __pyx_t_2.header_type = __pyx_v_header_type;
  __pyx_t_2.comment = __pyx_v_comment;
  __pyx_t_1 = ((PyObject *)__pyx_f_8pysndlib_3clm_make_sample2file(__pyx_v_filename, 0, &__pyx_t_2)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3973, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pysndlib.clm.make_sample2file", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__459 = PyTuple_Pack(5, __pyx_n_s_filename, __pyx_n_s_chans, __pyx_n_s_sample_type, __pyx_n_s_header_type, __pyx_n_s_comment); if (unlikely(!__pyx_tuple__459)) __PYX_ERR(0, 3973, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__459);
  __Pyx_GIVEREF(__pyx_tuple__459);
  __pyx_codeobj__460 = (PyObject*)__Pyx_PyCode_New(5, 0, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__459, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_make_sample2file, 3973, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__460)) __PYX_ERR(0, 3973, __pyx_L1_error)
/* … */
  __pyx_t_41 = __Pyx_PyDict_NewPresized(4); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 3973, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  if (PyDict_SetItem(__pyx_t_41, __pyx_n_s_chans, __pyx_kp_s_Optional_int) < 0) __PYX_ERR(0, 3973, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_41, __pyx_n_s_sample_type, __pyx_kp_s_Optional_Sample) < 0) __PYX_ERR(0, 3973, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_41, __pyx_n_s_header_type, __pyx_kp_s_Optional_Header) < 0) __PYX_ERR(0, 3973, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_41, __pyx_n_s_comment, __pyx_kp_s_Optional_str) < 0) __PYX_ERR(0, 3973, __pyx_L1_error)
  __pyx_t_37 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_439make_sample2file, 0, __pyx_n_s_make_sample2file, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__460)); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 3973, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_37, __pyx_tuple__461);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_37, __pyx_t_41);
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_make_sample2file, __pyx_t_37) < 0) __PYX_ERR(0, 3973, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
  __pyx_tuple__461 = PyTuple_Pack(4, __pyx_int_1, Py_None, Py_None, Py_None); if (unlikely(!__pyx_tuple__461)) __PYX_ERR(0, 3973, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__461);
  __Pyx_GIVEREF(__pyx_tuple__461);
/* … */
struct __pyx_opt_args_8pysndlib_3clm_make_sample2file {
  int __pyx_n;
  PyObject *chans;
  PyObject *sample_type;
  PyObject *header_type;
  PyObject *comment;
};
 3974:     """
 3975:     return an output generator writing the sound file 'filename' which is set up to have chans'
 3976:     channels of 'sample_type' samples with a header of 'header_type'.  the latter should be sndlib
 3977:     identifiers.
 3978:     
 3979:     :param filename: name of file to write
 3980:     :param chans: number of channels
 3981:     :param sample_type: sample type of file
 3982:     :param header_type: header type of file
 3983:     :return: sample2file gen
 3984:     :rtype: mus_any
 3985:     """
+3986:     sample_type = sample_type or CLM.sample_type
  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_sample_type); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 3986, __pyx_L1_error)
  if (!__pyx_t_2) {
  } else {
    __Pyx_INCREF(__pyx_v_sample_type);
    __pyx_t_1 = __pyx_v_sample_type;
    goto __pyx_L3_bool_binop_done;
  }
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_CLM); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3986, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_sample_type); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3986, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_INCREF(__pyx_t_4);
  __pyx_t_1 = __pyx_t_4;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_L3_bool_binop_done:;
  __Pyx_DECREF_SET(__pyx_v_sample_type, __pyx_t_1);
  __pyx_t_1 = 0;
+3987:     header_type = header_type or CLM.header_type
  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_header_type); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 3987, __pyx_L1_error)
  if (!__pyx_t_2) {
  } else {
    __Pyx_INCREF(__pyx_v_header_type);
    __pyx_t_1 = __pyx_v_header_type;
    goto __pyx_L5_bool_binop_done;
  }
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_CLM); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3987, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_header_type); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3987, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_INCREF(__pyx_t_3);
  __pyx_t_1 = __pyx_t_3;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_L5_bool_binop_done:;
  __Pyx_DECREF_SET(__pyx_v_header_type, __pyx_t_1);
  __pyx_t_1 = 0;
+3988:     if comment is None:
  __pyx_t_2 = (__pyx_v_comment == Py_None);
  if (__pyx_t_2) {
/* … */
  }
+3989:         return mus_any.from_ptr(cclm.mus_make_sample_to_file_with_comment(filename, chans, sample_type, header_type, NULL))
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __pyx_t_5 = __Pyx_PyObject_AsString(__pyx_v_filename); if (unlikely((!__pyx_t_5) && PyErr_Occurred())) __PYX_ERR(0, 3989, __pyx_L1_error)
    __pyx_t_6 = __Pyx_PyInt_As_int(__pyx_v_chans); if (unlikely((__pyx_t_6 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 3989, __pyx_L1_error)
    __pyx_t_7 = __Pyx_PyInt_As_mus_sample_t(__pyx_v_sample_type); if (unlikely((__pyx_t_7 == ((mus_sample_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 3989, __pyx_L1_error)
    __pyx_t_8 = __Pyx_PyInt_As_mus_header_t(__pyx_v_header_type); if (unlikely((__pyx_t_8 == ((mus_header_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 3989, __pyx_L1_error)
    __pyx_t_1 = ((PyObject *)__pyx_vtabptr_8pysndlib_3clm_mus_any->from_ptr(mus_make_sample_to_file_with_comment(__pyx_t_5, __pyx_t_6, __pyx_t_7, __pyx_t_8, NULL), NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3989, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_r = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)__pyx_t_1);
    __pyx_t_1 = 0;
    goto __pyx_L0;
 3990:     else:
+3991:         return mus_any.from_ptr(cclm.mus_make_sample_to_file_with_comment(filename, chans, sample_type, header_type, comment))
  /*else*/ {
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __pyx_t_5 = __Pyx_PyObject_AsString(__pyx_v_filename); if (unlikely((!__pyx_t_5) && PyErr_Occurred())) __PYX_ERR(0, 3991, __pyx_L1_error)
    __pyx_t_6 = __Pyx_PyInt_As_int(__pyx_v_chans); if (unlikely((__pyx_t_6 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 3991, __pyx_L1_error)
    __pyx_t_7 = __Pyx_PyInt_As_mus_sample_t(__pyx_v_sample_type); if (unlikely((__pyx_t_7 == ((mus_sample_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 3991, __pyx_L1_error)
    __pyx_t_8 = __Pyx_PyInt_As_mus_header_t(__pyx_v_header_type); if (unlikely((__pyx_t_8 == ((mus_header_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 3991, __pyx_L1_error)
    __pyx_t_9 = __Pyx_PyObject_AsString(__pyx_v_comment); if (unlikely((!__pyx_t_9) && PyErr_Occurred())) __PYX_ERR(0, 3991, __pyx_L1_error)
    __pyx_t_1 = ((PyObject *)__pyx_vtabptr_8pysndlib_3clm_mus_any->from_ptr(mus_make_sample_to_file_with_comment(__pyx_t_5, __pyx_t_6, __pyx_t_7, __pyx_t_8, __pyx_t_9), NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3991, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_r = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)__pyx_t_1);
    __pyx_t_1 = 0;
    goto __pyx_L0;
  }
 3992: 
+3993: cpdef cython.double sample2file(gen: mus_any, samp: int, chan:int , val: cython.double):
static PyObject *__pyx_pw_8pysndlib_3clm_441sample2file(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static double __pyx_f_8pysndlib_3clm_sample2file(struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen, PyObject *__pyx_v_samp, PyObject *__pyx_v_chan, double __pyx_v_val, CYTHON_UNUSED int __pyx_skip_dispatch) {
  double __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("sample2file", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("pysndlib.clm.sample2file", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_441sample2file(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_440sample2file, "\n    add val to the output stream handled by the output generator 'obj', \\in channel 'chan' at frample 'samp'.\n    \n    :param gen: sample2file gem\n    :param samp: location \\in file to write\n    :param chan: channel to write\n    :param val: sample value to write\n    :rtype: float\n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_441sample2file = {"sample2file", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_441sample2file, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_440sample2file};
static PyObject *__pyx_pw_8pysndlib_3clm_441sample2file(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen = 0;
  PyObject *__pyx_v_samp = 0;
  PyObject *__pyx_v_chan = 0;
  double __pyx_v_val;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("sample2file (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_gen,&__pyx_n_s_samp,&__pyx_n_s_chan,&__pyx_n_s_val,0};
    PyObject* values[4] = {0,0,0,0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  4: values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_gen)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 3993, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_samp)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 3993, __pyx_L3_error)
        else {
          __Pyx_RaiseArgtupleInvalid("sample2file", 1, 4, 4, 1); __PYX_ERR(0, 3993, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_chan)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 3993, __pyx_L3_error)
        else {
          __Pyx_RaiseArgtupleInvalid("sample2file", 1, 4, 4, 2); __PYX_ERR(0, 3993, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (likely((values[3] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_val)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 3993, __pyx_L3_error)
        else {
          __Pyx_RaiseArgtupleInvalid("sample2file", 1, 4, 4, 3); __PYX_ERR(0, 3993, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "sample2file") < 0)) __PYX_ERR(0, 3993, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 4)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
      values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
      values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
      values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3);
    }
    __pyx_v_gen = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)values[0]);
    __pyx_v_samp = ((PyObject*)values[1]);
    __pyx_v_chan = ((PyObject*)values[2]);
    __pyx_v_val = __pyx_PyFloat_AsDouble(values[3]); if (unlikely((__pyx_v_val == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 3993, __pyx_L3_error)
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("sample2file", 1, 4, 4, __pyx_nargs); __PYX_ERR(0, 3993, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.sample2file", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_gen), __pyx_ptype_8pysndlib_3clm_mus_any, 0, "gen", 0))) __PYX_ERR(0, 3993, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_samp), (&PyInt_Type), 0, "samp", 1))) __PYX_ERR(0, 3993, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_chan), (&PyInt_Type), 0, "chan", 1))) __PYX_ERR(0, 3993, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pysndlib_3clm_440sample2file(__pyx_self, __pyx_v_gen, __pyx_v_samp, __pyx_v_chan, __pyx_v_val);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_440sample2file(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen, PyObject *__pyx_v_samp, PyObject *__pyx_v_chan, double __pyx_v_val) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("sample2file", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_8pysndlib_3clm_sample2file(__pyx_v_gen, __pyx_v_samp, __pyx_v_chan, __pyx_v_val, 0); if (unlikely(__pyx_t_1 == ((double)-1) && PyErr_Occurred())) __PYX_ERR(0, 3993, __pyx_L1_error)
  __pyx_t_2 = PyFloat_FromDouble(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3993, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pysndlib.clm.sample2file", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__462 = PyTuple_Pack(4, __pyx_n_s_gen, __pyx_n_s_samp, __pyx_n_s_chan, __pyx_n_s_val); if (unlikely(!__pyx_tuple__462)) __PYX_ERR(0, 3993, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__462);
  __Pyx_GIVEREF(__pyx_tuple__462);
/* … */
  __pyx_t_37 = __Pyx_PyDict_NewPresized(4); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 3993, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  if (PyDict_SetItem(__pyx_t_37, __pyx_n_s_gen, __pyx_n_s_mus_any) < 0) __PYX_ERR(0, 3993, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_37, __pyx_n_s_samp, __pyx_n_s_int_2) < 0) __PYX_ERR(0, 3993, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_37, __pyx_n_s_chan, __pyx_n_s_int_2) < 0) __PYX_ERR(0, 3993, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_37, __pyx_n_s_val, __pyx_kp_s_cython_double) < 0) __PYX_ERR(0, 3993, __pyx_L1_error)
  __pyx_t_41 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_441sample2file, 0, __pyx_n_s_sample2file, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__463)); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 3993, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_41, __pyx_t_37);
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_sample2file, __pyx_t_41) < 0) __PYX_ERR(0, 3993, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
  __pyx_codeobj__463 = (PyObject*)__Pyx_PyCode_New(4, 0, 0, 4, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__462, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_sample2file, 3993, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__463)) __PYX_ERR(0, 3993, __pyx_L1_error)
 3994:     """
 3995:     add val to the output stream handled by the output generator 'obj', \in channel 'chan' at frample 'samp'.
 3996:     
 3997:     :param gen: sample2file gem
 3998:     :param samp: location \in file to write
 3999:     :param chan: channel to write
 4000:     :param val: sample value to write
 4001:     :rtype: float
 4002:     """
+4003:     return cclm.mus_sample_to_file(gen._ptr, samp, chan, val)
  __pyx_t_1 = __Pyx_PyInt_As_mus_long_t(__pyx_v_samp); if (unlikely((__pyx_t_1 == ((mus_long_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 4003, __pyx_L1_error)
  __pyx_t_2 = __Pyx_PyInt_As_int(__pyx_v_chan); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 4003, __pyx_L1_error)
  __pyx_r = mus_sample_to_file(__pyx_v_gen->_ptr, __pyx_t_1, __pyx_t_2, __pyx_v_val);
  goto __pyx_L0;
 4004: 
+4005: cpdef bint is_sample2file(gen: mus_any):
static PyObject *__pyx_pw_8pysndlib_3clm_443is_sample2file(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static int __pyx_f_8pysndlib_3clm_is_sample2file(struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen, CYTHON_UNUSED int __pyx_skip_dispatch) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_sample2file", 0);
/* … */
  /* function exit code */
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_443is_sample2file(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_442is_sample2file, "\n    returns True if gen is a sample2file.\n    \n    :param gen: gen\n    :rtype: bool\n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_443is_sample2file = {"is_sample2file", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_443is_sample2file, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_442is_sample2file};
static PyObject *__pyx_pw_8pysndlib_3clm_443is_sample2file(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_sample2file (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_gen,0};
    PyObject* values[1] = {0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_gen)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 4005, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "is_sample2file") < 0)) __PYX_ERR(0, 4005, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
    }
    __pyx_v_gen = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)values[0]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("is_sample2file", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 4005, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.is_sample2file", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_gen), __pyx_ptype_8pysndlib_3clm_mus_any, 0, "gen", 0))) __PYX_ERR(0, 4005, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pysndlib_3clm_442is_sample2file(__pyx_self, __pyx_v_gen);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_442is_sample2file(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_sample2file", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_8pysndlib_3clm_is_sample2file(__pyx_v_gen, 0); if (unlikely(__pyx_t_1 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 4005, __pyx_L1_error)
  __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4005, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pysndlib.clm.is_sample2file", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_41 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 4005, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  if (PyDict_SetItem(__pyx_t_41, __pyx_n_s_gen, __pyx_n_s_mus_any) < 0) __PYX_ERR(0, 4005, __pyx_L1_error)
  __pyx_t_37 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_443is_sample2file, 0, __pyx_n_s_is_sample2file, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__464)); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 4005, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_37, __pyx_t_41);
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_is_sample2file, __pyx_t_37) < 0) __PYX_ERR(0, 4005, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
/* … */
  __pyx_codeobj__464 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__46, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_is_sample2file, 4005, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__464)) __PYX_ERR(0, 4005, __pyx_L1_error)
 4006:     """
 4007:     returns True if gen is a sample2file.
 4008:     
 4009:     :param gen: gen
 4010:     :rtype: bool
 4011:     """
+4012:     return cclm.mus_is_sample_to_file(gen._ptr)
  __pyx_r = mus_is_sample_to_file(__pyx_v_gen->_ptr);
  goto __pyx_L0;
 4013: 
+4014: cpdef mus_any continue_sample2file(name: str):
static PyObject *__pyx_pw_8pysndlib_3clm_445continue_sample2file(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_f_8pysndlib_3clm_continue_sample2file(PyObject *__pyx_v_name, CYTHON_UNUSED int __pyx_skip_dispatch) {
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("continue_sample2file", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pysndlib.clm.continue_sample2file", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_445continue_sample2file(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_444continue_sample2file, "\n    reopen an existing file to continue adding sound data to it.\n    \n    :param filename: name of file to write\n    :return: file2sample gen\n    :rtype: mus_any\n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_445continue_sample2file = {"continue_sample2file", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_445continue_sample2file, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_444continue_sample2file};
static PyObject *__pyx_pw_8pysndlib_3clm_445continue_sample2file(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_name = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("continue_sample2file (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_name,0};
    PyObject* values[1] = {0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_name)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 4014, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "continue_sample2file") < 0)) __PYX_ERR(0, 4014, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
    }
    __pyx_v_name = ((PyObject*)values[0]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("continue_sample2file", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 4014, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.continue_sample2file", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_name), (&PyString_Type), 0, "name", 1))) __PYX_ERR(0, 4014, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pysndlib_3clm_444continue_sample2file(__pyx_self, __pyx_v_name);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_444continue_sample2file(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_name) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("continue_sample2file", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = ((PyObject *)__pyx_f_8pysndlib_3clm_continue_sample2file(__pyx_v_name, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4014, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pysndlib.clm.continue_sample2file", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__465 = PyTuple_Pack(1, __pyx_n_s_name); if (unlikely(!__pyx_tuple__465)) __PYX_ERR(0, 4014, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__465);
  __Pyx_GIVEREF(__pyx_tuple__465);
/* … */
  __pyx_t_37 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 4014, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  if (PyDict_SetItem(__pyx_t_37, __pyx_n_s_name, __pyx_n_s_str_2) < 0) __PYX_ERR(0, 4014, __pyx_L1_error)
  __pyx_t_41 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_445continue_sample2file, 0, __pyx_n_s_continue_sample2file, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__466)); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 4014, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_41, __pyx_t_37);
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_continue_sample2file, __pyx_t_41) < 0) __PYX_ERR(0, 4014, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
  __pyx_codeobj__466 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__465, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_continue_sample2file, 4014, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__466)) __PYX_ERR(0, 4014, __pyx_L1_error)
 4015:     """
 4016:     reopen an existing file to continue adding sound data to it.
 4017:     
 4018:     :param filename: name of file to write
 4019:     :return: file2sample gen
 4020:     :rtype: mus_any
 4021:     """
+4022:     return mus_any.from_ptr(cclm.mus_continue_sample_to_file(name))
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __pyx_t_1 = __Pyx_PyObject_AsString(__pyx_v_name); if (unlikely((!__pyx_t_1) && PyErr_Occurred())) __PYX_ERR(0, 4022, __pyx_L1_error)
  __pyx_t_2 = ((PyObject *)__pyx_vtabptr_8pysndlib_3clm_mus_any->from_ptr(mus_continue_sample_to_file(__pyx_t_1), NULL)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4022, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)__pyx_t_2);
  __pyx_t_2 = 0;
  goto __pyx_L0;
 4023: 
 4024: 
 4025: # ---------------- file-to-frample ---------------- #
+4026: cpdef mus_any make_file2frample(filename, buffer_size: Optional[int]=None):
static PyObject *__pyx_pw_8pysndlib_3clm_447make_file2frample(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_f_8pysndlib_3clm_make_file2frample(PyObject *__pyx_v_filename, CYTHON_UNUSED int __pyx_skip_dispatch, struct __pyx_opt_args_8pysndlib_3clm_make_file2frample *__pyx_optional_args) {
  PyObject *__pyx_v_buffer_size = ((PyObject *)Py_None);
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("make_file2frample", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_buffer_size = __pyx_optional_args->buffer_size;
    }
  }
  __Pyx_INCREF(__pyx_v_buffer_size);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("pysndlib.clm.make_file2frample", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_buffer_size);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_447make_file2frample(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_446make_file2frample, "\n    return an input generator reading all channels of 'filename' (a sound file).\n    \n    :param filename: name of file to read\n    :param buffer_size: io buffer size\n    :return: file2frample gen\n    :rtype: mus_any\n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_447make_file2frample = {"make_file2frample", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_447make_file2frample, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_446make_file2frample};
static PyObject *__pyx_pw_8pysndlib_3clm_447make_file2frample(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_filename = 0;
  PyObject *__pyx_v_buffer_size = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("make_file2frample (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_filename,&__pyx_n_s_buffer_size,0};
    PyObject* values[2] = {0,0};
    values[1] = ((PyObject *)Py_None);
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_filename)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 4026, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_buffer_size);
          if (value) { values[1] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 4026, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "make_file2frample") < 0)) __PYX_ERR(0, 4026, __pyx_L3_error)
      }
    } else {
      switch (__pyx_nargs) {
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_filename = values[0];
    __pyx_v_buffer_size = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("make_file2frample", 0, 1, 2, __pyx_nargs); __PYX_ERR(0, 4026, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.make_file2frample", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pysndlib_3clm_446make_file2frample(__pyx_self, __pyx_v_filename, __pyx_v_buffer_size);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_446make_file2frample(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_filename, PyObject *__pyx_v_buffer_size) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("make_file2frample", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2.__pyx_n = 1;
  __pyx_t_2.buffer_size = __pyx_v_buffer_size;
  __pyx_t_1 = ((PyObject *)__pyx_f_8pysndlib_3clm_make_file2frample(__pyx_v_filename, 0, &__pyx_t_2)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4026, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pysndlib.clm.make_file2frample", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_41 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 4026, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  if (PyDict_SetItem(__pyx_t_41, __pyx_n_s_buffer_size, __pyx_kp_s_Optional_int) < 0) __PYX_ERR(0, 4026, __pyx_L1_error)
  __pyx_t_37 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_447make_file2frample, 0, __pyx_n_s_make_file2frample, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__467)); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 4026, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_37, __pyx_tuple__258);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_37, __pyx_t_41);
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_make_file2frample, __pyx_t_37) < 0) __PYX_ERR(0, 4026, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
/* … */
  __pyx_codeobj__467 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__453, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_make_file2frample, 4026, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__467)) __PYX_ERR(0, 4026, __pyx_L1_error)
/* … */
struct __pyx_opt_args_8pysndlib_3clm_make_file2frample {
  int __pyx_n;
  PyObject *buffer_size;
};
 4027:     """
 4028:     return an input generator reading all channels of 'filename' (a sound file).
 4029:     
 4030:     :param filename: name of file to read
 4031:     :param buffer_size: io buffer size
 4032:     :return: file2frample gen
 4033:     :rtype: mus_any
 4034:     """
+4035:     buffer_size = buffer_size or CLM.buffer_size
  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_buffer_size); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 4035, __pyx_L1_error)
  if (!__pyx_t_2) {
  } else {
    __Pyx_INCREF(__pyx_v_buffer_size);
    __pyx_t_1 = __pyx_v_buffer_size;
    goto __pyx_L3_bool_binop_done;
  }
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_CLM); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4035, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_buffer_size); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4035, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_INCREF(__pyx_t_4);
  __pyx_t_1 = __pyx_t_4;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_L3_bool_binop_done:;
  __Pyx_DECREF_SET(__pyx_v_buffer_size, __pyx_t_1);
  __pyx_t_1 = 0;
+4036:     return  mus_any.from_ptr(cclm.mus_make_file_to_frample_with_buffer_size(filename, buffer_size))
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __pyx_t_5 = __Pyx_PyObject_AsString(__pyx_v_filename); if (unlikely((!__pyx_t_5) && PyErr_Occurred())) __PYX_ERR(0, 4036, __pyx_L1_error)
  __pyx_t_6 = __Pyx_PyInt_As_mus_long_t(__pyx_v_buffer_size); if (unlikely((__pyx_t_6 == ((mus_long_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 4036, __pyx_L1_error)
  __pyx_t_1 = ((PyObject *)__pyx_vtabptr_8pysndlib_3clm_mus_any->from_ptr(mus_make_file_to_frample_with_buffer_size(__pyx_t_5, __pyx_t_6), NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4036, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)__pyx_t_1);
  __pyx_t_1 = 0;
  goto __pyx_L0;
 4037: 
+4038: cpdef file2frample(gen: mus_any, loc: int):
static PyObject *__pyx_pw_8pysndlib_3clm_449file2frample(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyObject *__pyx_f_8pysndlib_3clm_file2frample(struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen, PyObject *__pyx_v_loc, CYTHON_UNUSED int __pyx_skip_dispatch) {
  PyObject *__pyx_v_outf = NULL;
  __Pyx_memviewslice __pyx_v_outf_view = { 0, 0, { 0 }, { 0 }, { 0 } };
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("file2frample", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __PYX_XCLEAR_MEMVIEW(&__pyx_t_6, 1);
  __Pyx_AddTraceback("pysndlib.clm.file2frample", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_outf);
  __PYX_XCLEAR_MEMVIEW(&__pyx_v_outf_view, 1);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_449file2frample(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_448file2frample, "\n    frample of samples at frample 'samp' \\in sound file read by 'obj'.\n    \n    :param gen: file2frample gen\n    :param loc: location \\in file to read\n    :rtype: np.ndarray\n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_449file2frample = {"file2frample", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_449file2frample, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_448file2frample};
static PyObject *__pyx_pw_8pysndlib_3clm_449file2frample(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen = 0;
  PyObject *__pyx_v_loc = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("file2frample (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_gen,&__pyx_n_s_loc,0};
    PyObject* values[2] = {0,0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_gen)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 4038, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_loc)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 4038, __pyx_L3_error)
        else {
          __Pyx_RaiseArgtupleInvalid("file2frample", 1, 2, 2, 1); __PYX_ERR(0, 4038, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "file2frample") < 0)) __PYX_ERR(0, 4038, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 2)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
      values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
    }
    __pyx_v_gen = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)values[0]);
    __pyx_v_loc = ((PyObject*)values[1]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("file2frample", 1, 2, 2, __pyx_nargs); __PYX_ERR(0, 4038, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.file2frample", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_gen), __pyx_ptype_8pysndlib_3clm_mus_any, 0, "gen", 0))) __PYX_ERR(0, 4038, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_loc), (&PyInt_Type), 0, "loc", 1))) __PYX_ERR(0, 4038, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pysndlib_3clm_448file2frample(__pyx_self, __pyx_v_gen, __pyx_v_loc);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_448file2frample(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen, PyObject *__pyx_v_loc) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("file2frample", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_8pysndlib_3clm_file2frample(__pyx_v_gen, __pyx_v_loc, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4038, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pysndlib.clm.file2frample", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__468 = PyTuple_Pack(2, __pyx_n_s_gen, __pyx_n_s_loc); if (unlikely(!__pyx_tuple__468)) __PYX_ERR(0, 4038, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__468);
  __Pyx_GIVEREF(__pyx_tuple__468);
/* … */
  __pyx_t_37 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 4038, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  if (PyDict_SetItem(__pyx_t_37, __pyx_n_s_gen, __pyx_n_s_mus_any) < 0) __PYX_ERR(0, 4038, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_37, __pyx_n_s_loc, __pyx_n_s_int_2) < 0) __PYX_ERR(0, 4038, __pyx_L1_error)
  __pyx_t_41 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_449file2frample, 0, __pyx_n_s_file2frample, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__469)); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 4038, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_41, __pyx_t_37);
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_file2frample, __pyx_t_41) < 0) __PYX_ERR(0, 4038, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
  __pyx_codeobj__469 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__468, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_file2frample, 4038, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__469)) __PYX_ERR(0, 4038, __pyx_L1_error)
 4039:     """
 4040:     frample of samples at frample 'samp' \in sound file read by 'obj'.
 4041:     
 4042:     :param gen: file2frample gen
 4043:     :param loc: location \in file to read
 4044:     :rtype: np.ndarray
 4045:     """
+4046:     outf = np.zeros(cclm.mus_channels(gen._ptr), dtype=np.double)
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4046, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_zeros); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4046, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyInt_From_int(mus_channels(__pyx_v_gen->_ptr)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4046, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4046, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1);
  __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4046, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4046, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_double); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4046, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_t_5) < 0) __PYX_ERR(0, 4046, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, __pyx_t_1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4046, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_outf = __pyx_t_5;
  __pyx_t_5 = 0;
+4047:     cdef double [:] outf_view = outf
  __pyx_t_6 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_outf, PyBUF_WRITABLE); if (unlikely(!__pyx_t_6.memview)) __PYX_ERR(0, 4047, __pyx_L1_error)
  __pyx_v_outf_view = __pyx_t_6;
  __pyx_t_6.memview = NULL;
  __pyx_t_6.data = NULL;
+4048:     cclm.mus_file_to_frample(gen._ptr, loc, &outf_view[0])
  __pyx_t_7 = __Pyx_PyInt_As_mus_long_t(__pyx_v_loc); if (unlikely((__pyx_t_7 == ((mus_long_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 4048, __pyx_L1_error)
  __pyx_t_8 = 0;
  __pyx_t_9 = -1;
  if (__pyx_t_8 < 0) {
    __pyx_t_8 += __pyx_v_outf_view.shape[0];
    if (unlikely(__pyx_t_8 < 0)) __pyx_t_9 = 0;
  } else if (unlikely(__pyx_t_8 >= __pyx_v_outf_view.shape[0])) __pyx_t_9 = 0;
  if (unlikely(__pyx_t_9 != -1)) {
    __Pyx_RaiseBufferIndexError(__pyx_t_9);
    __PYX_ERR(0, 4048, __pyx_L1_error)
  }
  (void)(mus_file_to_frample(__pyx_v_gen->_ptr, __pyx_t_7, (&(*((double *) ( /* dim=0 */ (__pyx_v_outf_view.data + __pyx_t_8 * __pyx_v_outf_view.strides[0]) ))))));
+4049:     return outf
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_outf);
  __pyx_r = __pyx_v_outf;
  goto __pyx_L0;
 4050: 
+4051: cpdef is_file2frample(gen: mus_any):
static PyObject *__pyx_pw_8pysndlib_3clm_451is_file2frample(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyObject *__pyx_f_8pysndlib_3clm_is_file2frample(struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen, CYTHON_UNUSED int __pyx_skip_dispatch) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_file2frample", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pysndlib.clm.is_file2frample", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_451is_file2frample(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_450is_file2frample, "\n    returns True if gen is a file2frample.\n    \n    :param gen: gen\n    :rtype: bool\n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_451is_file2frample = {"is_file2frample", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_451is_file2frample, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_450is_file2frample};
static PyObject *__pyx_pw_8pysndlib_3clm_451is_file2frample(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_file2frample (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_gen,0};
    PyObject* values[1] = {0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_gen)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 4051, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "is_file2frample") < 0)) __PYX_ERR(0, 4051, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
    }
    __pyx_v_gen = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)values[0]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("is_file2frample", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 4051, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.is_file2frample", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_gen), __pyx_ptype_8pysndlib_3clm_mus_any, 0, "gen", 0))) __PYX_ERR(0, 4051, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pysndlib_3clm_450is_file2frample(__pyx_self, __pyx_v_gen);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_450is_file2frample(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_file2frample", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_8pysndlib_3clm_is_file2frample(__pyx_v_gen, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4051, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pysndlib.clm.is_file2frample", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_41 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 4051, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  if (PyDict_SetItem(__pyx_t_41, __pyx_n_s_gen, __pyx_n_s_mus_any) < 0) __PYX_ERR(0, 4051, __pyx_L1_error)
  __pyx_t_37 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_451is_file2frample, 0, __pyx_n_s_is_file2frample, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__470)); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 4051, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_37, __pyx_t_41);
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_is_file2frample, __pyx_t_37) < 0) __PYX_ERR(0, 4051, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
/* … */
  __pyx_codeobj__470 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__46, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_is_file2frample, 4051, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__470)) __PYX_ERR(0, 4051, __pyx_L1_error)
 4052:     """
 4053:     returns True if gen is a file2frample.
 4054:     
 4055:     :param gen: gen
 4056:     :rtype: bool
 4057:     """
+4058:     return cclm.mus_is_file_to_frample(gen._ptr)
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyBool_FromLong(mus_is_file_to_frample(__pyx_v_gen->_ptr)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4058, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 4059: 
 4060: 
 4061: # ---------------- frample-to-file ---------------- #
+4062: cpdef mus_any make_frample2file(filename, chans: Optional[int]=1, sample_type: Optional[sample]=None, header_type: Optional[header]=None, comment: Optional[str]=None):
static PyObject *__pyx_pw_8pysndlib_3clm_453make_frample2file(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_f_8pysndlib_3clm_make_frample2file(PyObject *__pyx_v_filename, CYTHON_UNUSED int __pyx_skip_dispatch, struct __pyx_opt_args_8pysndlib_3clm_make_frample2file *__pyx_optional_args) {
  PyObject *__pyx_v_chans = ((PyObject *)__pyx_int_1);
  PyObject *__pyx_v_sample_type = ((PyObject *)Py_None);
  PyObject *__pyx_v_header_type = ((PyObject *)Py_None);
  PyObject *__pyx_v_comment = ((PyObject *)Py_None);
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("make_frample2file", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_chans = __pyx_optional_args->chans;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_sample_type = __pyx_optional_args->sample_type;
        if (__pyx_optional_args->__pyx_n > 2) {
          __pyx_v_header_type = __pyx_optional_args->header_type;
          if (__pyx_optional_args->__pyx_n > 3) {
            __pyx_v_comment = __pyx_optional_args->comment;
          }
        }
      }
    }
  }
  __Pyx_INCREF(__pyx_v_sample_type);
  __Pyx_INCREF(__pyx_v_header_type);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("pysndlib.clm.make_frample2file", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_sample_type);
  __Pyx_XDECREF(__pyx_v_header_type);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_453make_frample2file(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_452make_frample2file, "\n    return an output generator writing the sound file 'filename' which is set up to have 'chans'\n    channels of 'sample_type' samples with a header of 'header_type'.  the latter should be sndlib\n    identifiers.    \n    \n    :param filename: name of file to write\n    :param chans: number of channels\n    :param frample2file: sample type of file\n    :param header_type: header type of file\n    :return: sample2file gen\n    :rtype: mus_any    \n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_453make_frample2file = {"make_frample2file", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_453make_frample2file, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_452make_frample2file};
static PyObject *__pyx_pw_8pysndlib_3clm_453make_frample2file(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_filename = 0;
  PyObject *__pyx_v_chans = 0;
  PyObject *__pyx_v_sample_type = 0;
  PyObject *__pyx_v_header_type = 0;
  PyObject *__pyx_v_comment = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("make_frample2file (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_filename,&__pyx_n_s_chans,&__pyx_n_s_sample_type,&__pyx_n_s_header_type,&__pyx_n_s_comment,0};
    PyObject* values[5] = {0,0,0,0,0};
    values[1] = ((PyObject *)__pyx_int_1);
    values[2] = ((PyObject *)Py_None);
    values[3] = ((PyObject *)Py_None);
    values[4] = ((PyObject *)Py_None);
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  5: values[4] = __Pyx_Arg_FASTCALL(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_filename)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 4062, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_chans);
          if (value) { values[1] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 4062, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_sample_type);
          if (value) { values[2] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 4062, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_header_type);
          if (value) { values[3] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 4062, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_comment);
          if (value) { values[4] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 4062, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "make_frample2file") < 0)) __PYX_ERR(0, 4062, __pyx_L3_error)
      }
    } else {
      switch (__pyx_nargs) {
        case  5: values[4] = __Pyx_Arg_FASTCALL(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_filename = values[0];
    __pyx_v_chans = values[1];
    __pyx_v_sample_type = values[2];
    __pyx_v_header_type = values[3];
    __pyx_v_comment = values[4];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("make_frample2file", 0, 1, 5, __pyx_nargs); __PYX_ERR(0, 4062, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.make_frample2file", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pysndlib_3clm_452make_frample2file(__pyx_self, __pyx_v_filename, __pyx_v_chans, __pyx_v_sample_type, __pyx_v_header_type, __pyx_v_comment);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_452make_frample2file(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_filename, PyObject *__pyx_v_chans, PyObject *__pyx_v_sample_type, PyObject *__pyx_v_header_type, PyObject *__pyx_v_comment) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("make_frample2file", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2.__pyx_n = 4;
  __pyx_t_2.chans = __pyx_v_chans;
  __pyx_t_2.sample_type = __pyx_v_sample_type;
  __pyx_t_2.header_type = __pyx_v_header_type;
  __pyx_t_2.comment = __pyx_v_comment;
  __pyx_t_1 = ((PyObject *)__pyx_f_8pysndlib_3clm_make_frample2file(__pyx_v_filename, 0, &__pyx_t_2)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4062, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pysndlib.clm.make_frample2file", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_37 = __Pyx_PyDict_NewPresized(4); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 4062, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  if (PyDict_SetItem(__pyx_t_37, __pyx_n_s_chans, __pyx_kp_s_Optional_int) < 0) __PYX_ERR(0, 4062, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_37, __pyx_n_s_sample_type, __pyx_kp_s_Optional_sample) < 0) __PYX_ERR(0, 4062, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_37, __pyx_n_s_header_type, __pyx_kp_s_Optional_header) < 0) __PYX_ERR(0, 4062, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_37, __pyx_n_s_comment, __pyx_kp_s_Optional_str) < 0) __PYX_ERR(0, 4062, __pyx_L1_error)
  __pyx_t_41 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_453make_frample2file, 0, __pyx_n_s_make_frample2file, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__471)); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 4062, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_41, __pyx_tuple__461);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_41, __pyx_t_37);
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_make_frample2file, __pyx_t_41) < 0) __PYX_ERR(0, 4062, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
/* … */
  __pyx_codeobj__471 = (PyObject*)__Pyx_PyCode_New(5, 0, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__459, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_make_frample2file, 4062, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__471)) __PYX_ERR(0, 4062, __pyx_L1_error)
/* … */
struct __pyx_opt_args_8pysndlib_3clm_make_frample2file {
  int __pyx_n;
  PyObject *chans;
  PyObject *sample_type;
  PyObject *header_type;
  PyObject *comment;
};
 4063:     """
 4064:     return an output generator writing the sound file 'filename' which is set up to have 'chans'
 4065:     channels of 'sample_type' samples with a header of 'header_type'.  the latter should be sndlib
 4066:     identifiers.    
 4067:     
 4068:     :param filename: name of file to write
 4069:     :param chans: number of channels
 4070:     :param frample2file: sample type of file
 4071:     :param header_type: header type of file
 4072:     :return: sample2file gen
 4073:     :rtype: mus_any    
 4074:     """
+4075:     sample_type = sample_type or CLM.sample_type
  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_sample_type); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 4075, __pyx_L1_error)
  if (!__pyx_t_2) {
  } else {
    __Pyx_INCREF(__pyx_v_sample_type);
    __pyx_t_1 = __pyx_v_sample_type;
    goto __pyx_L3_bool_binop_done;
  }
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_CLM); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4075, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_sample_type); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4075, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_INCREF(__pyx_t_4);
  __pyx_t_1 = __pyx_t_4;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_L3_bool_binop_done:;
  __Pyx_DECREF_SET(__pyx_v_sample_type, __pyx_t_1);
  __pyx_t_1 = 0;
+4076:     header_type = header_type or CLM.header_type
  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_header_type); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 4076, __pyx_L1_error)
  if (!__pyx_t_2) {
  } else {
    __Pyx_INCREF(__pyx_v_header_type);
    __pyx_t_1 = __pyx_v_header_type;
    goto __pyx_L5_bool_binop_done;
  }
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_CLM); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4076, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_header_type); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4076, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_INCREF(__pyx_t_3);
  __pyx_t_1 = __pyx_t_3;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_L5_bool_binop_done:;
  __Pyx_DECREF_SET(__pyx_v_header_type, __pyx_t_1);
  __pyx_t_1 = 0;
+4077:     if comment:
  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_comment); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 4077, __pyx_L1_error)
  if (__pyx_t_2) {
/* … */
  }
+4078:         return mus_any.from_ptr(cclm.mus_make_frample_to_file_with_comment(filename, chans, sample_type, header_type, comment))
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __pyx_t_5 = __Pyx_PyObject_AsString(__pyx_v_filename); if (unlikely((!__pyx_t_5) && PyErr_Occurred())) __PYX_ERR(0, 4078, __pyx_L1_error)
    __pyx_t_6 = __Pyx_PyInt_As_int(__pyx_v_chans); if (unlikely((__pyx_t_6 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 4078, __pyx_L1_error)
    __pyx_t_7 = __Pyx_PyInt_As_mus_sample_t(__pyx_v_sample_type); if (unlikely((__pyx_t_7 == ((mus_sample_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 4078, __pyx_L1_error)
    __pyx_t_8 = __Pyx_PyInt_As_mus_header_t(__pyx_v_header_type); if (unlikely((__pyx_t_8 == ((mus_header_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 4078, __pyx_L1_error)
    __pyx_t_9 = __Pyx_PyObject_AsString(__pyx_v_comment); if (unlikely((!__pyx_t_9) && PyErr_Occurred())) __PYX_ERR(0, 4078, __pyx_L1_error)
    __pyx_t_1 = ((PyObject *)__pyx_vtabptr_8pysndlib_3clm_mus_any->from_ptr(mus_make_frample_to_file_with_comment(__pyx_t_5, __pyx_t_6, __pyx_t_7, __pyx_t_8, __pyx_t_9), NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4078, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_r = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)__pyx_t_1);
    __pyx_t_1 = 0;
    goto __pyx_L0;
 4079:     else:
+4080:         return mus_any.from_ptr(cclm.mus_make_frample_to_file_with_comment(filename, chans, sample_type, header_type, NULL))
  /*else*/ {
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __pyx_t_5 = __Pyx_PyObject_AsString(__pyx_v_filename); if (unlikely((!__pyx_t_5) && PyErr_Occurred())) __PYX_ERR(0, 4080, __pyx_L1_error)
    __pyx_t_6 = __Pyx_PyInt_As_int(__pyx_v_chans); if (unlikely((__pyx_t_6 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 4080, __pyx_L1_error)
    __pyx_t_7 = __Pyx_PyInt_As_mus_sample_t(__pyx_v_sample_type); if (unlikely((__pyx_t_7 == ((mus_sample_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 4080, __pyx_L1_error)
    __pyx_t_8 = __Pyx_PyInt_As_mus_header_t(__pyx_v_header_type); if (unlikely((__pyx_t_8 == ((mus_header_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 4080, __pyx_L1_error)
    __pyx_t_1 = ((PyObject *)__pyx_vtabptr_8pysndlib_3clm_mus_any->from_ptr(mus_make_frample_to_file_with_comment(__pyx_t_5, __pyx_t_6, __pyx_t_7, __pyx_t_8, NULL), NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4080, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_r = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)__pyx_t_1);
    __pyx_t_1 = 0;
    goto __pyx_L0;
  }
 4081: 
+4082: cpdef cython.double frample2file(gen: mus_any, samp: int, vals):
static PyObject *__pyx_pw_8pysndlib_3clm_455frample2file(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static double __pyx_f_8pysndlib_3clm_frample2file(struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen, PyObject *__pyx_v_samp, PyObject *__pyx_v_vals, CYTHON_UNUSED int __pyx_skip_dispatch) {
  __Pyx_memviewslice __pyx_v_val_view = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_frample = { 0, 0, { 0 }, { 0 }, { 0 } };
  double __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("frample2file", 0);
  __Pyx_INCREF(__pyx_v_vals);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __PYX_XCLEAR_MEMVIEW(&__pyx_t_1, 1);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("pysndlib.clm.frample2file", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __PYX_XCLEAR_MEMVIEW(&__pyx_v_val_view, 1);
  __PYX_XCLEAR_MEMVIEW(&__pyx_v_frample, 1);
  __Pyx_XDECREF(__pyx_v_vals);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_455frample2file(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_454frample2file, "\n    add frample 'val' to the output stream handled by the output generator 'obj' at frample 'samp'.\n    \n    :param gen: frample2file gem\n    :param samp: location \\in file to write\n    :param vals: sample value to write. list or np.ndarray\n    :rtype: float\n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_455frample2file = {"frample2file", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_455frample2file, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_454frample2file};
static PyObject *__pyx_pw_8pysndlib_3clm_455frample2file(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen = 0;
  PyObject *__pyx_v_samp = 0;
  PyObject *__pyx_v_vals = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("frample2file (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_gen,&__pyx_n_s_samp,&__pyx_n_s_vals,0};
    PyObject* values[3] = {0,0,0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_gen)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 4082, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_samp)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 4082, __pyx_L3_error)
        else {
          __Pyx_RaiseArgtupleInvalid("frample2file", 1, 3, 3, 1); __PYX_ERR(0, 4082, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_vals)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 4082, __pyx_L3_error)
        else {
          __Pyx_RaiseArgtupleInvalid("frample2file", 1, 3, 3, 2); __PYX_ERR(0, 4082, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "frample2file") < 0)) __PYX_ERR(0, 4082, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 3)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
      values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
      values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
    }
    __pyx_v_gen = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)values[0]);
    __pyx_v_samp = ((PyObject*)values[1]);
    __pyx_v_vals = values[2];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("frample2file", 1, 3, 3, __pyx_nargs); __PYX_ERR(0, 4082, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.frample2file", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_gen), __pyx_ptype_8pysndlib_3clm_mus_any, 0, "gen", 0))) __PYX_ERR(0, 4082, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_samp), (&PyInt_Type), 0, "samp", 1))) __PYX_ERR(0, 4082, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pysndlib_3clm_454frample2file(__pyx_self, __pyx_v_gen, __pyx_v_samp, __pyx_v_vals);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_454frample2file(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen, PyObject *__pyx_v_samp, PyObject *__pyx_v_vals) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("frample2file", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_8pysndlib_3clm_frample2file(__pyx_v_gen, __pyx_v_samp, __pyx_v_vals, 0); if (unlikely(__pyx_t_1 == ((double)-1) && PyErr_Occurred())) __PYX_ERR(0, 4082, __pyx_L1_error)
  __pyx_t_2 = PyFloat_FromDouble(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4082, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pysndlib.clm.frample2file", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__472 = PyTuple_Pack(3, __pyx_n_s_gen, __pyx_n_s_samp, __pyx_n_s_vals); if (unlikely(!__pyx_tuple__472)) __PYX_ERR(0, 4082, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__472);
  __Pyx_GIVEREF(__pyx_tuple__472);
/* … */
  __pyx_t_41 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 4082, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  if (PyDict_SetItem(__pyx_t_41, __pyx_n_s_gen, __pyx_n_s_mus_any) < 0) __PYX_ERR(0, 4082, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_41, __pyx_n_s_samp, __pyx_n_s_int_2) < 0) __PYX_ERR(0, 4082, __pyx_L1_error)
  __pyx_t_37 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_455frample2file, 0, __pyx_n_s_frample2file, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__473)); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 4082, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_37, __pyx_t_41);
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_frample2file, __pyx_t_37) < 0) __PYX_ERR(0, 4082, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
  __pyx_codeobj__473 = (PyObject*)__Pyx_PyCode_New(3, 0, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__472, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_frample2file, 4082, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__473)) __PYX_ERR(0, 4082, __pyx_L1_error)
 4083:     """
 4084:     add frample 'val' to the output stream handled by the output generator 'obj' at frample 'samp'.
 4085:     
 4086:     :param gen: frample2file gem
 4087:     :param samp: location \in file to write
 4088:     :param vals: sample value to write. list or np.ndarray
 4089:     :rtype: float
 4090:     """
+4091:     cdef double [:] val_view = None
  __pyx_t_1 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(Py_None, PyBUF_WRITABLE); if (unlikely(!__pyx_t_1.memview)) __PYX_ERR(0, 4091, __pyx_L1_error)
  __pyx_v_val_view = __pyx_t_1;
  __pyx_t_1.memview = NULL;
  __pyx_t_1.data = NULL;
 4092: 
+4093:     if isinstance(vals, list):
  __pyx_t_2 = PyList_Check(__pyx_v_vals); 
  if (__pyx_t_2) {
/* … */
  }
+4094:         vals = np.array(vals)
    __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4094, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_array); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4094, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_4 = NULL;
    __pyx_t_6 = 0;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) {
      __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_5);
      if (likely(__pyx_t_4)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
        __Pyx_INCREF(__pyx_t_4);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_5, function);
        __pyx_t_6 = 1;
      }
    }
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_v_vals};
      __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_5, __pyx_callargs+1-__pyx_t_6, 1+__pyx_t_6);
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4094, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    }
    __Pyx_DECREF_SET(__pyx_v_vals, __pyx_t_3);
    __pyx_t_3 = 0;
 4095: 
+4096:     val_view = vals
  __pyx_t_1 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_vals, PyBUF_WRITABLE); if (unlikely(!__pyx_t_1.memview)) __PYX_ERR(0, 4096, __pyx_L1_error)
  __PYX_XCLEAR_MEMVIEW(&__pyx_v_val_view, 1);
  __pyx_v_val_view = __pyx_t_1;
  __pyx_t_1.memview = NULL;
  __pyx_t_1.data = NULL;
 4097: 
+4098:     frample = val_view
  __PYX_INC_MEMVIEW(&__pyx_v_val_view, 1);
  __pyx_v_frample = __pyx_v_val_view;
+4099:     cclm.mus_frample_to_file(gen._ptr, samp, &frample[0])
  __pyx_t_7 = __Pyx_PyInt_As_mus_long_t(__pyx_v_samp); if (unlikely((__pyx_t_7 == ((mus_long_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 4099, __pyx_L1_error)
  __pyx_t_8 = 0;
  __pyx_t_6 = -1;
  if (__pyx_t_8 < 0) {
    __pyx_t_8 += __pyx_v_frample.shape[0];
    if (unlikely(__pyx_t_8 < 0)) __pyx_t_6 = 0;
  } else if (unlikely(__pyx_t_8 >= __pyx_v_frample.shape[0])) __pyx_t_6 = 0;
  if (unlikely(__pyx_t_6 != -1)) {
    __Pyx_RaiseBufferIndexError(__pyx_t_6);
    __PYX_ERR(0, 4099, __pyx_L1_error)
  }
  (void)(mus_frample_to_file(__pyx_v_gen->_ptr, __pyx_t_7, (&(*((double *) ( /* dim=0 */ (__pyx_v_frample.data + __pyx_t_8 * __pyx_v_frample.strides[0]) ))))));
+4100:     return vals
  __pyx_t_9 = __pyx_PyFloat_AsDouble(__pyx_v_vals); if (unlikely((__pyx_t_9 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 4100, __pyx_L1_error)
  __pyx_r = __pyx_t_9;
  goto __pyx_L0;
 4101: 
+4102: cpdef bint is_frample2file(gen: mus_any):
static PyObject *__pyx_pw_8pysndlib_3clm_457is_frample2file(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static int __pyx_f_8pysndlib_3clm_is_frample2file(struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen, CYTHON_UNUSED int __pyx_skip_dispatch) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_frample2file", 0);
/* … */
  /* function exit code */
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_457is_frample2file(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_456is_frample2file, "\n    returns True if gen is a frample2file.\n    \n    :param gen: gen\n    :rtype: bool\n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_457is_frample2file = {"is_frample2file", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_457is_frample2file, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_456is_frample2file};
static PyObject *__pyx_pw_8pysndlib_3clm_457is_frample2file(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_frample2file (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_gen,0};
    PyObject* values[1] = {0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_gen)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 4102, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "is_frample2file") < 0)) __PYX_ERR(0, 4102, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
    }
    __pyx_v_gen = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)values[0]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("is_frample2file", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 4102, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.is_frample2file", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_gen), __pyx_ptype_8pysndlib_3clm_mus_any, 0, "gen", 0))) __PYX_ERR(0, 4102, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pysndlib_3clm_456is_frample2file(__pyx_self, __pyx_v_gen);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_456is_frample2file(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_frample2file", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_8pysndlib_3clm_is_frample2file(__pyx_v_gen, 0); if (unlikely(__pyx_t_1 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 4102, __pyx_L1_error)
  __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4102, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pysndlib.clm.is_frample2file", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_37 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 4102, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  if (PyDict_SetItem(__pyx_t_37, __pyx_n_s_gen, __pyx_n_s_mus_any) < 0) __PYX_ERR(0, 4102, __pyx_L1_error)
  __pyx_t_41 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_457is_frample2file, 0, __pyx_n_s_is_frample2file, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__474)); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 4102, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_41, __pyx_t_37);
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_is_frample2file, __pyx_t_41) < 0) __PYX_ERR(0, 4102, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
/* … */
  __pyx_codeobj__474 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__46, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_is_frample2file, 4102, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__474)) __PYX_ERR(0, 4102, __pyx_L1_error)
 4103:     """
 4104:     returns True if gen is a frample2file.
 4105:     
 4106:     :param gen: gen
 4107:     :rtype: bool
 4108:     """
+4109:     return cclm.mus_is_frample_to_file(gen._ptr)
  __pyx_r = mus_is_frample_to_file(__pyx_v_gen->_ptr);
  goto __pyx_L0;
 4110: 
 4111: 
+4112: cpdef mus_any continue_frample2file(name: str):
static PyObject *__pyx_pw_8pysndlib_3clm_459continue_frample2file(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_f_8pysndlib_3clm_continue_frample2file(PyObject *__pyx_v_name, CYTHON_UNUSED int __pyx_skip_dispatch) {
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("continue_frample2file", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pysndlib.clm.continue_frample2file", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_459continue_frample2file(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_458continue_frample2file, "\n    reopen an existing file to continue adding sound data to it.\n    \n    :param filename: name of file to write\n    :return: frample2file gen\n    :rtype: mus_any\n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_459continue_frample2file = {"continue_frample2file", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_459continue_frample2file, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_458continue_frample2file};
static PyObject *__pyx_pw_8pysndlib_3clm_459continue_frample2file(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_name = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("continue_frample2file (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_name,0};
    PyObject* values[1] = {0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_name)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 4112, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "continue_frample2file") < 0)) __PYX_ERR(0, 4112, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
    }
    __pyx_v_name = ((PyObject*)values[0]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("continue_frample2file", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 4112, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.continue_frample2file", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_name), (&PyString_Type), 0, "name", 1))) __PYX_ERR(0, 4112, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pysndlib_3clm_458continue_frample2file(__pyx_self, __pyx_v_name);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_458continue_frample2file(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_name) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("continue_frample2file", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = ((PyObject *)__pyx_f_8pysndlib_3clm_continue_frample2file(__pyx_v_name, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4112, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pysndlib.clm.continue_frample2file", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_41 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 4112, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  if (PyDict_SetItem(__pyx_t_41, __pyx_n_s_name, __pyx_n_s_str_2) < 0) __PYX_ERR(0, 4112, __pyx_L1_error)
  __pyx_t_37 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_459continue_frample2file, 0, __pyx_n_s_continue_frample2file, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__475)); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 4112, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_37, __pyx_t_41);
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_continue_frample2file, __pyx_t_37) < 0) __PYX_ERR(0, 4112, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
/* … */
  __pyx_codeobj__475 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__465, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_continue_frample2file, 4112, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__475)) __PYX_ERR(0, 4112, __pyx_L1_error)
 4113:     """
 4114:     reopen an existing file to continue adding sound data to it.
 4115:     
 4116:     :param filename: name of file to write
 4117:     :return: frample2file gen
 4118:     :rtype: mus_any
 4119:     """
+4120:     return mus_any.from_ptr(cclm.mus_continue_frample_to_file(name))
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __pyx_t_1 = __Pyx_PyObject_AsString(__pyx_v_name); if (unlikely((!__pyx_t_1) && PyErr_Occurred())) __PYX_ERR(0, 4120, __pyx_L1_error)
  __pyx_t_2 = ((PyObject *)__pyx_vtabptr_8pysndlib_3clm_mus_any->from_ptr(mus_continue_frample_to_file(__pyx_t_1), NULL)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4120, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)__pyx_t_2);
  __pyx_t_2 = 0;
  goto __pyx_L0;
 4121: 
 4122: 
 4123: # ---------------- readin ---------------- #
+4124: cpdef mus_any make_readin(filename: str, chan: int=0, start: int=0, direction: Optional[int]=1, buffer_size: Optional[int]=None):
static PyObject *__pyx_pw_8pysndlib_3clm_461make_readin(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_f_8pysndlib_3clm_make_readin(PyObject *__pyx_v_filename, CYTHON_UNUSED int __pyx_skip_dispatch, struct __pyx_opt_args_8pysndlib_3clm_make_readin *__pyx_optional_args) {
  PyObject *__pyx_v_chan = __pyx_k__40;
  PyObject *__pyx_v_start = __pyx_k__41;
  PyObject *__pyx_v_direction = ((PyObject *)__pyx_int_1);
  PyObject *__pyx_v_buffer_size = ((PyObject *)Py_None);
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("make_readin", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_chan = __pyx_optional_args->chan;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_start = __pyx_optional_args->start;
        if (__pyx_optional_args->__pyx_n > 2) {
          __pyx_v_direction = __pyx_optional_args->direction;
          if (__pyx_optional_args->__pyx_n > 3) {
            __pyx_v_buffer_size = __pyx_optional_args->buffer_size;
          }
        }
      }
    }
  }
  __Pyx_INCREF(__pyx_v_buffer_size);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("pysndlib.clm.make_readin", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_buffer_size);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_461make_readin(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_460make_readin, "\n    return a new readin (file input) generator reading the sound file 'file' starting at frample\n    'start' \\in channel 'channel' and reading forward if 'direction' is not -1.\n    \n    :param filename: name of file to read\n    :param chan: channel to read (0 based)\n    :param start: location \\in samples to start at\n    :param direction: forward (1) or backward (-1)\n    :param buffer_size: io buffer size\n    \n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_461make_readin = {"make_readin", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_461make_readin, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_460make_readin};
static PyObject *__pyx_pw_8pysndlib_3clm_461make_readin(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_filename = 0;
  PyObject *__pyx_v_chan = 0;
  PyObject *__pyx_v_start = 0;
  PyObject *__pyx_v_direction = 0;
  PyObject *__pyx_v_buffer_size = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("make_readin (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_filename,&__pyx_n_s_chan,&__pyx_n_s_start,&__pyx_n_s_direction,&__pyx_n_s_buffer_size,0};
    PyObject* values[5] = {0,0,0,0,0};
    values[1] = __pyx_k__40;
    values[2] = __pyx_k__41;
    values[3] = ((PyObject *)__pyx_int_1);
    values[4] = ((PyObject *)Py_None);
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  5: values[4] = __Pyx_Arg_FASTCALL(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_filename)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 4124, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_chan);
          if (value) { values[1] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 4124, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_start);
          if (value) { values[2] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 4124, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_direction);
          if (value) { values[3] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 4124, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_buffer_size);
          if (value) { values[4] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 4124, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "make_readin") < 0)) __PYX_ERR(0, 4124, __pyx_L3_error)
      }
    } else {
      switch (__pyx_nargs) {
        case  5: values[4] = __Pyx_Arg_FASTCALL(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_filename = ((PyObject*)values[0]);
    __pyx_v_chan = ((PyObject*)values[1]);
    __pyx_v_start = ((PyObject*)values[2]);
    __pyx_v_direction = values[3];
    __pyx_v_buffer_size = values[4];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("make_readin", 0, 1, 5, __pyx_nargs); __PYX_ERR(0, 4124, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.make_readin", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_filename), (&PyString_Type), 0, "filename", 1))) __PYX_ERR(0, 4124, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_chan), (&PyInt_Type), 0, "chan", 1))) __PYX_ERR(0, 4124, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_start), (&PyInt_Type), 0, "start", 1))) __PYX_ERR(0, 4124, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pysndlib_3clm_460make_readin(__pyx_self, __pyx_v_filename, __pyx_v_chan, __pyx_v_start, __pyx_v_direction, __pyx_v_buffer_size);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_460make_readin(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_filename, PyObject *__pyx_v_chan, PyObject *__pyx_v_start, PyObject *__pyx_v_direction, PyObject *__pyx_v_buffer_size) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("make_readin", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2.__pyx_n = 4;
  __pyx_t_2.chan = __pyx_v_chan;
  __pyx_t_2.start = __pyx_v_start;
  __pyx_t_2.direction = __pyx_v_direction;
  __pyx_t_2.buffer_size = __pyx_v_buffer_size;
  __pyx_t_1 = ((PyObject *)__pyx_f_8pysndlib_3clm_make_readin(__pyx_v_filename, 0, &__pyx_t_2)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4124, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pysndlib.clm.make_readin", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  if (!(likely(__Pyx_Py3Int_CheckExact(__pyx_int_0)) || __Pyx_RaiseUnexpectedTypeError("int", __pyx_int_0))) __PYX_ERR(0, 4124, __pyx_L1_error)
  __Pyx_INCREF(__pyx_int_0);
  __pyx_k__40 = ((PyObject*)__pyx_int_0);
  __Pyx_GIVEREF(__pyx_int_0);
  if (!(likely(__Pyx_Py3Int_CheckExact(__pyx_int_0)) || __Pyx_RaiseUnexpectedTypeError("int", __pyx_int_0))) __PYX_ERR(0, 4124, __pyx_L1_error)
  __Pyx_INCREF(__pyx_int_0);
  __pyx_k__41 = ((PyObject*)__pyx_int_0);
  __Pyx_GIVEREF(__pyx_int_0);
/* … */
  __pyx_tuple__476 = PyTuple_Pack(5, __pyx_n_s_filename, __pyx_n_s_chan, __pyx_n_s_start, __pyx_n_s_direction, __pyx_n_s_buffer_size); if (unlikely(!__pyx_tuple__476)) __PYX_ERR(0, 4124, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__476);
  __Pyx_GIVEREF(__pyx_tuple__476);
  if (!(likely(__Pyx_Py3Int_CheckExact(__pyx_int_0)) || __Pyx_RaiseUnexpectedTypeError("int", __pyx_int_0))) __PYX_ERR(0, 4124, __pyx_L1_error)
  if (!(likely(__Pyx_Py3Int_CheckExact(__pyx_int_0)) || __Pyx_RaiseUnexpectedTypeError("int", __pyx_int_0))) __PYX_ERR(0, 4124, __pyx_L1_error)
  __pyx_t_37 = PyTuple_New(4); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 4124, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  __Pyx_INCREF(__pyx_int_0);
  __Pyx_GIVEREF(__pyx_int_0);
  PyTuple_SET_ITEM(__pyx_t_37, 0, __pyx_int_0);
  __Pyx_INCREF(__pyx_int_0);
  __Pyx_GIVEREF(__pyx_int_0);
  PyTuple_SET_ITEM(__pyx_t_37, 1, __pyx_int_0);
  __Pyx_INCREF(__pyx_int_1);
  __Pyx_GIVEREF(__pyx_int_1);
  PyTuple_SET_ITEM(__pyx_t_37, 2, __pyx_int_1);
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  PyTuple_SET_ITEM(__pyx_t_37, 3, Py_None);
  __pyx_t_41 = __Pyx_PyDict_NewPresized(5); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 4124, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  if (PyDict_SetItem(__pyx_t_41, __pyx_n_s_filename, __pyx_n_s_str_2) < 0) __PYX_ERR(0, 4124, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_41, __pyx_n_s_chan, __pyx_n_s_int_2) < 0) __PYX_ERR(0, 4124, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_41, __pyx_n_s_start, __pyx_n_s_int_2) < 0) __PYX_ERR(0, 4124, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_41, __pyx_n_s_direction, __pyx_kp_s_Optional_int) < 0) __PYX_ERR(0, 4124, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_41, __pyx_n_s_buffer_size, __pyx_kp_s_Optional_int) < 0) __PYX_ERR(0, 4124, __pyx_L1_error)
  __pyx_t_40 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_461make_readin, 0, __pyx_n_s_make_readin, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__477)); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 4124, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_40, __pyx_t_37);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_40, __pyx_t_41);
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_make_readin, __pyx_t_40) < 0) __PYX_ERR(0, 4124, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
  __pyx_codeobj__477 = (PyObject*)__Pyx_PyCode_New(5, 0, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__476, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_make_readin, 4124, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__477)) __PYX_ERR(0, 4124, __pyx_L1_error)
/* … */
struct __pyx_opt_args_8pysndlib_3clm_make_readin {
  int __pyx_n;
  PyObject *chan;
  PyObject *start;
  PyObject *direction;
  PyObject *buffer_size;
};
 4125:     """
 4126:     return a new readin (file input) generator reading the sound file 'file' starting at frample
 4127:     'start' \in channel 'channel' and reading forward if 'direction' is not -1.
 4128:     
 4129:     :param filename: name of file to read
 4130:     :param chan: channel to read (0 based)
 4131:     :param start: location \in samples to start at
 4132:     :param direction: forward (1) or backward (-1)
 4133:     :param buffer_size: io buffer size
 4134:     
 4135:     """
+4136:     check_range('chan', chan, 0, None)
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_check_range); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4136, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  __pyx_t_4 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
      __pyx_t_4 = 1;
    }
  }
  {
    PyObject *__pyx_callargs[5] = {__pyx_t_3, __pyx_n_s_chan, __pyx_v_chan, __pyx_int_0, Py_None};
    __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 4+__pyx_t_4);
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4136, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+4137:     check_range('start', start, 0, None)
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_check_range); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4137, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  __pyx_t_4 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
      __pyx_t_4 = 1;
    }
  }
  {
    PyObject *__pyx_callargs[5] = {__pyx_t_3, __pyx_n_s_start, __pyx_v_start, __pyx_int_0, Py_None};
    __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 4+__pyx_t_4);
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4137, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+4138:     check_range('buffer_size', buffer_size, 0, None)
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_check_range); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4138, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  __pyx_t_4 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
      __pyx_t_4 = 1;
    }
  }
  {
    PyObject *__pyx_callargs[5] = {__pyx_t_3, __pyx_n_s_buffer_size, __pyx_v_buffer_size, __pyx_int_0, Py_None};
    __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 4+__pyx_t_4);
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4138, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 4139: 
+4140:     buffer_size = buffer_size or CLM.buffer_size
  __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_v_buffer_size); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 4140, __pyx_L1_error)
  if (!__pyx_t_5) {
  } else {
    __Pyx_INCREF(__pyx_v_buffer_size);
    __pyx_t_1 = __pyx_v_buffer_size;
    goto __pyx_L3_bool_binop_done;
  }
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_CLM); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4140, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_buffer_size); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4140, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_INCREF(__pyx_t_3);
  __pyx_t_1 = __pyx_t_3;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_L3_bool_binop_done:;
  __Pyx_DECREF_SET(__pyx_v_buffer_size, __pyx_t_1);
  __pyx_t_1 = 0;
+4141:     return mus_any.from_ptr(cclm.mus_make_readin_with_buffer_size(filename, chan, start, direction, buffer_size))
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __pyx_t_6 = __Pyx_PyObject_AsString(__pyx_v_filename); if (unlikely((!__pyx_t_6) && PyErr_Occurred())) __PYX_ERR(0, 4141, __pyx_L1_error)
  __pyx_t_4 = __Pyx_PyInt_As_int(__pyx_v_chan); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 4141, __pyx_L1_error)
  __pyx_t_7 = __Pyx_PyInt_As_mus_long_t(__pyx_v_start); if (unlikely((__pyx_t_7 == ((mus_long_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 4141, __pyx_L1_error)
  __pyx_t_8 = __Pyx_PyInt_As_int(__pyx_v_direction); if (unlikely((__pyx_t_8 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 4141, __pyx_L1_error)
  __pyx_t_9 = __Pyx_PyInt_As_mus_long_t(__pyx_v_buffer_size); if (unlikely((__pyx_t_9 == ((mus_long_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 4141, __pyx_L1_error)
  __pyx_t_1 = ((PyObject *)__pyx_vtabptr_8pysndlib_3clm_mus_any->from_ptr(mus_make_readin_with_buffer_size(__pyx_t_6, __pyx_t_4, __pyx_t_7, __pyx_t_8, __pyx_t_9), NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4141, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)__pyx_t_1);
  __pyx_t_1 = 0;
  goto __pyx_L0;
 4142: 
+4143: cpdef cython.double readin(gen: mus_any):
static PyObject *__pyx_pw_8pysndlib_3clm_463readin(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static double __pyx_f_8pysndlib_3clm_readin(struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen, CYTHON_UNUSED int __pyx_skip_dispatch) {
  double __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("readin", 0);
/* … */
  /* function exit code */
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_463readin(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_462readin, "\n    next sample from readin generator (a sound file reader).\n    \n    :param gen: readin gen\n    :rtype: float\n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_463readin = {"readin", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_463readin, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_462readin};
static PyObject *__pyx_pw_8pysndlib_3clm_463readin(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("readin (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_gen,0};
    PyObject* values[1] = {0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_gen)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 4143, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "readin") < 0)) __PYX_ERR(0, 4143, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
    }
    __pyx_v_gen = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)values[0]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("readin", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 4143, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.readin", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_gen), __pyx_ptype_8pysndlib_3clm_mus_any, 0, "gen", 0))) __PYX_ERR(0, 4143, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pysndlib_3clm_462readin(__pyx_self, __pyx_v_gen);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_462readin(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("readin", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_8pysndlib_3clm_readin(__pyx_v_gen, 0); if (unlikely(__pyx_t_1 == ((double)-1) && PyErr_Occurred())) __PYX_ERR(0, 4143, __pyx_L1_error)
  __pyx_t_2 = PyFloat_FromDouble(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4143, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pysndlib.clm.readin", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_40 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 4143, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  if (PyDict_SetItem(__pyx_t_40, __pyx_n_s_gen, __pyx_n_s_mus_any) < 0) __PYX_ERR(0, 4143, __pyx_L1_error)
  __pyx_t_41 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_463readin, 0, __pyx_n_s_readin, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__478)); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 4143, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_41, __pyx_t_40);
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_readin, __pyx_t_41) < 0) __PYX_ERR(0, 4143, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
/* … */
  __pyx_codeobj__478 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__46, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_readin, 4143, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__478)) __PYX_ERR(0, 4143, __pyx_L1_error)
 4144:     """
 4145:     next sample from readin generator (a sound file reader).
 4146:     
 4147:     :param gen: readin gen
 4148:     :rtype: float
 4149:     """
+4150:     return cclm.mus_readin(gen._ptr)
  __pyx_r = mus_readin(__pyx_v_gen->_ptr);
  goto __pyx_L0;
 4151: 
+4152: cpdef is_readin(gen: mus_any):
static PyObject *__pyx_pw_8pysndlib_3clm_465is_readin(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyObject *__pyx_f_8pysndlib_3clm_is_readin(struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen, CYTHON_UNUSED int __pyx_skip_dispatch) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_readin", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pysndlib.clm.is_readin", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_465is_readin(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_464is_readin, "\n    returns True if gen is a readin.\n    \n    :param gen: gen\n    :rtype: bool\n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_465is_readin = {"is_readin", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_465is_readin, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_464is_readin};
static PyObject *__pyx_pw_8pysndlib_3clm_465is_readin(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_readin (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_gen,0};
    PyObject* values[1] = {0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_gen)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 4152, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "is_readin") < 0)) __PYX_ERR(0, 4152, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
    }
    __pyx_v_gen = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)values[0]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("is_readin", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 4152, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.is_readin", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_gen), __pyx_ptype_8pysndlib_3clm_mus_any, 0, "gen", 0))) __PYX_ERR(0, 4152, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pysndlib_3clm_464is_readin(__pyx_self, __pyx_v_gen);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_464is_readin(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_readin", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_8pysndlib_3clm_is_readin(__pyx_v_gen, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4152, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pysndlib.clm.is_readin", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_41 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 4152, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  if (PyDict_SetItem(__pyx_t_41, __pyx_n_s_gen, __pyx_n_s_mus_any) < 0) __PYX_ERR(0, 4152, __pyx_L1_error)
  __pyx_t_40 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_465is_readin, 0, __pyx_n_s_is_readin, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__479)); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 4152, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_40, __pyx_t_41);
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_is_readin, __pyx_t_40) < 0) __PYX_ERR(0, 4152, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
/* … */
  __pyx_codeobj__479 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__46, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_is_readin, 4152, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__479)) __PYX_ERR(0, 4152, __pyx_L1_error)
 4153:     """
 4154:     returns True if gen is a readin.
 4155:     
 4156:     :param gen: gen
 4157:     :rtype: bool
 4158:     """
+4159:     return cclm.mus_is_readin(gen._ptr)
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyBool_FromLong(mus_is_readin(__pyx_v_gen->_ptr)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4159, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 4160: 
 4161: 
 4162: # ---------------- src ---------------- #
+4163: def make_src(inp , srate: Optional[float]=1.0, width: Optional[int]=10):
/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_467make_src(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_466make_src, "\n    return a new sampling-rate conversion generator (using 'warped sinc interpolation'). 'srate' is the\n    ratio between the new rate and the old. 'width' is the sine width (effectively the steepness of the\n    low-pass filter), normally between 10 and 100. 'input' if given is an open file stream.\n    \n    :param inp: gen or function to read from. if a callback, the function takes 1 input, the direction and should return read value\n    :param srate: ratio between the old sampling rate and the new\n    :param width: how many samples to convolve with sinc function\n    :return: src gen\n    :rtype: mus_any\n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_467make_src = {"make_src", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_467make_src, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_466make_src};
static PyObject *__pyx_pw_8pysndlib_3clm_467make_src(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_inp = 0;
  PyObject *__pyx_v_srate = 0;
  PyObject *__pyx_v_width = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("make_src (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_inp,&__pyx_n_s_srate,&__pyx_n_s_width,0};
    PyObject* values[3] = {0,0,0};
    values[1] = ((PyObject *)((PyObject*)__pyx_float_1_0));
    values[2] = ((PyObject *)((PyObject *)__pyx_int_10));
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_inp)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 4163, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_srate);
          if (value) { values[1] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 4163, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_width);
          if (value) { values[2] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 4163, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "make_src") < 0)) __PYX_ERR(0, 4163, __pyx_L3_error)
      }
    } else {
      switch (__pyx_nargs) {
        case  3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_inp = values[0];
    __pyx_v_srate = values[1];
    __pyx_v_width = values[2];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("make_src", 0, 1, 3, __pyx_nargs); __PYX_ERR(0, 4163, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.make_src", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pysndlib_3clm_466make_src(__pyx_self, __pyx_v_inp, __pyx_v_srate, __pyx_v_width);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
static PyObject *__pyx_pf_8pysndlib_3clm_466make_src(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_inp, PyObject *__pyx_v_srate, PyObject *__pyx_v_width) {
  struct __pyx_obj_8pysndlib_3clm___pyx_scope_struct__make_src *__pyx_cur_scope;
  input_cb __pyx_v_cy_inp_f_ptr;
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_res = NULL;
  PyObject *__pyx_v_inp_f = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("make_src", 0);
  __pyx_cur_scope = (struct __pyx_obj_8pysndlib_3clm___pyx_scope_struct__make_src *)__pyx_tp_new_8pysndlib_3clm___pyx_scope_struct__make_src(__pyx_ptype_8pysndlib_3clm___pyx_scope_struct__make_src, __pyx_empty_tuple, NULL);
  if (unlikely(!__pyx_cur_scope)) {
    __pyx_cur_scope = ((struct __pyx_obj_8pysndlib_3clm___pyx_scope_struct__make_src *)Py_None);
    __Pyx_INCREF(Py_None);
    __PYX_ERR(0, 4163, __pyx_L1_error)
  } else {
    __Pyx_GOTREF((PyObject *)__pyx_cur_scope);
  }
  __pyx_cur_scope->__pyx_v_inp = __pyx_v_inp;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_inp);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_inp);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_AddTraceback("pysndlib.clm.make_src", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_res);
  __Pyx_XDECREF(__pyx_v_inp_f);
  __Pyx_DECREF((PyObject *)__pyx_cur_scope);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__480 = PyTuple_Pack(7, __pyx_n_s_inp, __pyx_n_s_srate, __pyx_n_s_width, __pyx_n_s_cy_inp_f_ptr, __pyx_n_s_res, __pyx_n_s_inp_f, __pyx_n_s_inp_f); if (unlikely(!__pyx_tuple__480)) __PYX_ERR(0, 4163, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__480);
  __Pyx_GIVEREF(__pyx_tuple__480);
  __pyx_codeobj__481 = (PyObject*)__Pyx_PyCode_New(3, 0, 0, 7, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__480, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_make_src, 4163, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__481)) __PYX_ERR(0, 4163, __pyx_L1_error)
/* … */
  __pyx_t_40 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 4163, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  if (PyDict_SetItem(__pyx_t_40, __pyx_n_s_srate, __pyx_kp_s_Optional_float) < 0) __PYX_ERR(0, 4163, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_40, __pyx_n_s_width, __pyx_kp_s_Optional_int) < 0) __PYX_ERR(0, 4163, __pyx_L1_error)
  __pyx_t_41 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_467make_src, 0, __pyx_n_s_make_src, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__481)); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 4163, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_41, __pyx_tuple__482);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_41, __pyx_t_40);
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_make_src, __pyx_t_41) < 0) __PYX_ERR(0, 4163, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
  __pyx_tuple__482 = PyTuple_Pack(2, ((PyObject*)__pyx_float_1_0), ((PyObject *)__pyx_int_10)); if (unlikely(!__pyx_tuple__482)) __PYX_ERR(0, 4163, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__482);
  __Pyx_GIVEREF(__pyx_tuple__482);
/* … */
struct __pyx_obj_8pysndlib_3clm___pyx_scope_struct__make_src {
  PyObject_HEAD
  PyObject *__pyx_v_inp;
};

 4164:     """
 4165:     return a new sampling-rate conversion generator (using 'warped sinc interpolation'). 'srate' is the
 4166:     ratio between the new rate and the old. 'width' is the sine width (effectively the steepness of the
 4167:     low-pass filter), normally between 10 and 100. 'input' if given is an open file stream.
 4168:     
 4169:     :param inp: gen or function to read from. if a callback, the function takes 1 input, the direction and should return read value
 4170:     :param srate: ratio between the old sampling rate and the new
 4171:     :param width: how many samples to convolve with sinc function
 4172:     :return: src gen
 4173:     :rtype: mus_any
 4174:     """
 4175: 
+4176:     check_range('srate', srate, 0, None)
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_check_range); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4176, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  __pyx_t_4 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
      __pyx_t_4 = 1;
    }
  }
  {
    PyObject *__pyx_callargs[5] = {__pyx_t_3, __pyx_n_s_srate, __pyx_v_srate, __pyx_int_0, Py_None};
    __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 4+__pyx_t_4);
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4176, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+4177:     check_range('width', width, 0, None)
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_check_range); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4177, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  __pyx_t_4 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
      __pyx_t_4 = 1;
    }
  }
  {
    PyObject *__pyx_callargs[5] = {__pyx_t_3, __pyx_n_s_width, __pyx_v_width, __pyx_int_0, Py_None};
    __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 4+__pyx_t_4);
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4177, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 4178: 
 4179:     cdef cclm.input_cb cy_inp_f_ptr
 4180: 
+4181:     if(isinstance(inp, mus_any)):
  __pyx_t_1 = __pyx_cur_scope->__pyx_v_inp;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_t_5 = __Pyx_TypeCheck(__pyx_t_1, __pyx_ptype_8pysndlib_3clm_mus_any); 
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_5) {
/* … */
  }
+4182:         res = mus_any.from_ptr(cclm.mus_make_src(<cclm.input_cb>input_callback_func, srate, width, <void*>((<mus_any>inp)._ptr)))
    __pyx_t_6 = __pyx_PyFloat_AsDouble(__pyx_v_srate); if (unlikely((__pyx_t_6 == ((mus_float_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 4182, __pyx_L1_error)
    __pyx_t_4 = __Pyx_PyInt_As_int(__pyx_v_width); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 4182, __pyx_L1_error)
    __pyx_t_1 = ((PyObject *)__pyx_vtabptr_8pysndlib_3clm_mus_any->from_ptr(mus_make_src(((input_cb)__pyx_f_8pysndlib_3clm_input_callback_func), __pyx_t_6, __pyx_t_4, ((void *)((struct __pyx_obj_8pysndlib_3clm_mus_any *)__pyx_cur_scope->__pyx_v_inp)->_ptr)), NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4182, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_v_res = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)__pyx_t_1);
    __pyx_t_1 = 0;
+4183:         res._inputcallback = <cclm.input_cb>input_callback_func
    __pyx_v_res->_inputcallback = ((input_cb)__pyx_f_8pysndlib_3clm_input_callback_func);
+4184:         return res
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF((PyObject *)__pyx_v_res);
    __pyx_r = ((PyObject *)__pyx_v_res);
    goto __pyx_L0;
 4185: 
+4186:     if not callable(inp):
  __pyx_t_1 = __pyx_cur_scope->__pyx_v_inp;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_t_5 = __Pyx_PyCallable_Check(__pyx_t_1); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(0, 4186, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_7 = (!__pyx_t_5);
  if (unlikely(__pyx_t_7)) {
/* … */
  }
+4187:         raise TypeError(f"input needs to be a clm gen or function not a {type(inp)}")
    __pyx_t_1 = __Pyx_PyObject_FormatSimple(((PyObject *)Py_TYPE(__pyx_cur_scope->__pyx_v_inp)), __pyx_empty_unicode); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4187, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_2 = __Pyx_PyUnicode_Concat(__pyx_kp_u_input_needs_to_be_a_clm_gen_or_f, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4187, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_builtin_TypeError, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4187, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_Raise(__pyx_t_1, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __PYX_ERR(0, 4187, __pyx_L1_error)
 4188: 
+4189:     @INPUTCALLBACK
/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_8make_src_1inp_f(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_8pysndlib_3clm_8make_src_1inp_f = {"inp_f", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_8make_src_1inp_f, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_8pysndlib_3clm_8make_src_1inp_f(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  CYTHON_UNUSED PyObject *__pyx_v_gen = 0;
  PyObject *__pyx_v_d = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("inp_f (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_gen,&__pyx_n_s_d,0};
    PyObject* values[2] = {0,0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_gen)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 4189, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_d)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 4189, __pyx_L3_error)
        else {
          __Pyx_RaiseArgtupleInvalid("inp_f", 1, 2, 2, 1); __PYX_ERR(0, 4189, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "inp_f") < 0)) __PYX_ERR(0, 4189, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 2)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
      values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
    }
    __pyx_v_gen = values[0];
    __pyx_v_d = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("inp_f", 1, 2, 2, __pyx_nargs); __PYX_ERR(0, 4189, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.make_src.inp_f", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pysndlib_3clm_8make_src_inp_f(__pyx_self, __pyx_v_gen, __pyx_v_d);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_8make_src_inp_f(PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_gen, PyObject *__pyx_v_d) {
  struct __pyx_obj_8pysndlib_3clm___pyx_scope_struct__make_src *__pyx_cur_scope;
  struct __pyx_obj_8pysndlib_3clm___pyx_scope_struct__make_src *__pyx_outer_scope;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("inp_f", 0);
  __pyx_outer_scope = (struct __pyx_obj_8pysndlib_3clm___pyx_scope_struct__make_src *) __Pyx_CyFunction_GetClosure(__pyx_self);
  __pyx_cur_scope = __pyx_outer_scope;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("pysndlib.clm.make_src.inp_f", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_INPUTCALLBACK); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4189, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
/* … */
  __pyx_tuple__42 = PyTuple_Pack(2, __pyx_n_s_gen, __pyx_n_s_d); if (unlikely(!__pyx_tuple__42)) __PYX_ERR(0, 4189, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__42);
  __Pyx_GIVEREF(__pyx_tuple__42);
  __pyx_t_3 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_8make_src_1inp_f, 0, __pyx_n_s_make_src_locals_inp_f, ((PyObject*)__pyx_cur_scope), __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__43)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4189, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_8 = NULL;
  __pyx_t_4 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_8)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_8);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
      __pyx_t_4 = 1;
    }
  }
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_8, __pyx_t_3};
    __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4);
    __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4189, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  }
  __pyx_v_inp_f = __pyx_t_1;
  __pyx_t_1 = 0;
  __pyx_codeobj__43 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__42, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_inp_f, 4189, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__43)) __PYX_ERR(0, 4189, __pyx_L1_error)
 4190:     def inp_f(gen, d):
+4191:         return inp(d)
  __Pyx_XDECREF(__pyx_r);
  if (unlikely(!__pyx_cur_scope->__pyx_v_inp)) { __Pyx_RaiseClosureNameError("inp"); __PYX_ERR(0, 4191, __pyx_L1_error) }
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_inp);
  __pyx_t_2 = __pyx_cur_scope->__pyx_v_inp; __pyx_t_3 = NULL;
  __pyx_t_4 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
      __pyx_t_4 = 1;
    }
  }
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_v_d};
    __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4);
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4191, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  }
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 4192: 
+4193:     cy_inp_f_ptr = (<cclm.input_cb*><size_t>ctypes.addressof(inp_f))[0]
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_ctypes); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4193, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_addressof); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4193, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = NULL;
  __pyx_t_4 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
    if (likely(__pyx_t_2)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_2);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_3, function);
      __pyx_t_4 = 1;
    }
  }
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_v_inp_f};
    __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4);
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4193, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  }
  __pyx_t_9 = __Pyx_PyInt_As_size_t(__pyx_t_1); if (unlikely((__pyx_t_9 == (size_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 4193, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_cy_inp_f_ptr = (((input_cb *)((size_t)__pyx_t_9))[0]);
+4194:     res = mus_any.from_ptr(cclm.mus_make_src(cy_inp_f_ptr, srate, width, NULL))
  __pyx_t_6 = __pyx_PyFloat_AsDouble(__pyx_v_srate); if (unlikely((__pyx_t_6 == ((mus_float_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 4194, __pyx_L1_error)
  __pyx_t_4 = __Pyx_PyInt_As_int(__pyx_v_width); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 4194, __pyx_L1_error)
  __pyx_t_1 = ((PyObject *)__pyx_vtabptr_8pysndlib_3clm_mus_any->from_ptr(mus_make_src(__pyx_v_cy_inp_f_ptr, __pyx_t_6, __pyx_t_4, NULL), NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4194, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_res = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)__pyx_t_1);
  __pyx_t_1 = 0;
+4195:     res._inputcallback = cy_inp_f_ptr
  __pyx_v_res->_inputcallback = __pyx_v_cy_inp_f_ptr;
+4196:     res.cache_append(inp_f)
  __pyx_t_1 = ((struct __pyx_vtabstruct_8pysndlib_3clm_mus_any *)__pyx_v_res->__pyx_vtab)->cache_append(__pyx_v_res, __pyx_v_inp_f, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4196, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 4197: 
+4198:     return res
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF((PyObject *)__pyx_v_res);
  __pyx_r = ((PyObject *)__pyx_v_res);
  goto __pyx_L0;
 4199: 
+4200: cpdef cython.double src(gen: mus_any, sr_change: Optional[float]=0.0):
static PyObject *__pyx_pw_8pysndlib_3clm_469src(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static double __pyx_f_8pysndlib_3clm_src(struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen, CYTHON_UNUSED int __pyx_skip_dispatch, struct __pyx_opt_args_8pysndlib_3clm_src *__pyx_optional_args) {
  PyObject *__pyx_v_sr_change = ((PyObject *)__pyx_float_0_0);
  double __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("src", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_sr_change = __pyx_optional_args->sr_change;
    }
  }
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("pysndlib.clm.src", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_469src(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_468src, "\n    next sampling rate conversion sample. 'pm' can be used to change the sampling rate on a\n    sample-by-sample basis. 'input-function' is a function of one argument (the current input direction,\n    normally ignored) that is called internally whenever a new sample of input data is needed.  if the\n    associated make_src included an 'input' argument, input-function is ignored.\n    \n    :param gen: src gen\n    :param sr_change: change \\in ratio\n    :rtype: float  \n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_469src = {"src", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_469src, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_468src};
static PyObject *__pyx_pw_8pysndlib_3clm_469src(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen = 0;
  PyObject *__pyx_v_sr_change = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("src (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_gen,&__pyx_n_s_sr_change,0};
    PyObject* values[2] = {0,0};
    values[1] = ((PyObject *)__pyx_float_0_0);
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_gen)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 4200, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_sr_change);
          if (value) { values[1] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 4200, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "src") < 0)) __PYX_ERR(0, 4200, __pyx_L3_error)
      }
    } else {
      switch (__pyx_nargs) {
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_gen = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)values[0]);
    __pyx_v_sr_change = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("src", 0, 1, 2, __pyx_nargs); __PYX_ERR(0, 4200, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.src", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_gen), __pyx_ptype_8pysndlib_3clm_mus_any, 0, "gen", 0))) __PYX_ERR(0, 4200, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pysndlib_3clm_468src(__pyx_self, __pyx_v_gen, __pyx_v_sr_change);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_468src(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen, PyObject *__pyx_v_sr_change) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("src", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2.__pyx_n = 1;
  __pyx_t_2.sr_change = __pyx_v_sr_change;
  __pyx_t_1 = __pyx_f_8pysndlib_3clm_src(__pyx_v_gen, 0, &__pyx_t_2); if (unlikely(__pyx_t_1 == ((double)-1) && PyErr_Occurred())) __PYX_ERR(0, 4200, __pyx_L1_error)
  __pyx_t_3 = PyFloat_FromDouble(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4200, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_r = __pyx_t_3;
  __pyx_t_3 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("pysndlib.clm.src", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__483 = PyTuple_Pack(2, __pyx_n_s_gen, __pyx_n_s_sr_change); if (unlikely(!__pyx_tuple__483)) __PYX_ERR(0, 4200, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__483);
  __Pyx_GIVEREF(__pyx_tuple__483);
  __pyx_codeobj__484 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__483, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_src, 4200, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__484)) __PYX_ERR(0, 4200, __pyx_L1_error)
/* … */
  __pyx_t_41 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 4200, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  if (PyDict_SetItem(__pyx_t_41, __pyx_n_s_gen, __pyx_n_s_mus_any) < 0) __PYX_ERR(0, 4200, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_41, __pyx_n_s_sr_change, __pyx_kp_s_Optional_float) < 0) __PYX_ERR(0, 4200, __pyx_L1_error)
  __pyx_t_40 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_469src, 0, __pyx_n_s_src, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__484)); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 4200, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_40, __pyx_tuple__485);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_40, __pyx_t_41);
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_src, __pyx_t_40) < 0) __PYX_ERR(0, 4200, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
  __pyx_tuple__485 = PyTuple_Pack(1, __pyx_float_0_0); if (unlikely(!__pyx_tuple__485)) __PYX_ERR(0, 4200, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__485);
  __Pyx_GIVEREF(__pyx_tuple__485);
/* … */
struct __pyx_opt_args_8pysndlib_3clm_src {
  int __pyx_n;
  PyObject *sr_change;
};
 4201:     """
 4202:     next sampling rate conversion sample. 'pm' can be used to change the sampling rate on a
 4203:     sample-by-sample basis. 'input-function' is a function of one argument (the current input direction,
 4204:     normally ignored) that is called internally whenever a new sample of input data is needed.  if the
 4205:     associated make_src included an 'input' argument, input-function is ignored.
 4206:     
 4207:     :param gen: src gen
 4208:     :param sr_change: change \in ratio
 4209:     :rtype: float  
 4210:     """
+4211:     if gen._inputcallback:
  __pyx_t_1 = (__pyx_v_gen->_inputcallback != 0);
  if (__pyx_t_1) {
/* … */
  }
+4212:         return cclm.mus_src(gen._ptr, sr_change, <cclm.input_cb>gen._inputcallback)
    __pyx_t_2 = __pyx_PyFloat_AsDouble(__pyx_v_sr_change); if (unlikely((__pyx_t_2 == ((mus_float_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 4212, __pyx_L1_error)
    __pyx_r = mus_src(__pyx_v_gen->_ptr, __pyx_t_2, ((input_cb)__pyx_v_gen->_inputcallback));
    goto __pyx_L0;
 4213:     else:
+4214:         return 0.0
  /*else*/ {
    __pyx_r = 0.0;
    goto __pyx_L0;
  }
 4215: 
+4216: cpdef bint is_src(gen: mus_any):
static PyObject *__pyx_pw_8pysndlib_3clm_471is_src(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static int __pyx_f_8pysndlib_3clm_is_src(struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen, CYTHON_UNUSED int __pyx_skip_dispatch) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_src", 0);
/* … */
  /* function exit code */
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_471is_src(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_470is_src, "\n    returns True if gen is a src.\n    \n    :param gen: gen\n    :rtype: bool\n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_471is_src = {"is_src", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_471is_src, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_470is_src};
static PyObject *__pyx_pw_8pysndlib_3clm_471is_src(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_src (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_gen,0};
    PyObject* values[1] = {0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_gen)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 4216, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "is_src") < 0)) __PYX_ERR(0, 4216, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
    }
    __pyx_v_gen = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)values[0]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("is_src", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 4216, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.is_src", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_gen), __pyx_ptype_8pysndlib_3clm_mus_any, 0, "gen", 0))) __PYX_ERR(0, 4216, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pysndlib_3clm_470is_src(__pyx_self, __pyx_v_gen);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_470is_src(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_src", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_8pysndlib_3clm_is_src(__pyx_v_gen, 0); if (unlikely(__pyx_t_1 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 4216, __pyx_L1_error)
  __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4216, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pysndlib.clm.is_src", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_40 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 4216, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  if (PyDict_SetItem(__pyx_t_40, __pyx_n_s_gen, __pyx_n_s_mus_any) < 0) __PYX_ERR(0, 4216, __pyx_L1_error)
  __pyx_t_41 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_471is_src, 0, __pyx_n_s_is_src, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__486)); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 4216, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_41, __pyx_t_40);
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_is_src, __pyx_t_41) < 0) __PYX_ERR(0, 4216, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
/* … */
  __pyx_codeobj__486 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__46, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_is_src, 4216, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__486)) __PYX_ERR(0, 4216, __pyx_L1_error)
 4217:     """
 4218:     returns True if gen is a src.
 4219:     
 4220:     :param gen: gen
 4221:     :rtype: bool
 4222:     """
+4223:     return cclm.mus_is_src(gen._ptr)
  __pyx_r = mus_is_src(__pyx_v_gen->_ptr);
  goto __pyx_L0;
 4224: 
 4225: 
 4226: # ---------------- convolve ---------------- #
 4227: 
+4228: def make_convolve(inp, filt, fft_size: Optional[int]=512, filter_size: Optional[int]=None ):
/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_473make_convolve(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_472make_convolve, "\n    return a new convolution generator which convolves its input with the impulse response 'filter'.\n    \n    :param inp: gen or function to read from\n    :param filt: np.array of filter \n    :param fft_size: fft size used \\in the convolution\n    :param filter_size: how much of filter to use. if None use whole filter\n    :return: convolve gen\n    :rtype: mus_any\n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_473make_convolve = {"make_convolve", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_473make_convolve, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_472make_convolve};
static PyObject *__pyx_pw_8pysndlib_3clm_473make_convolve(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_inp = 0;
  PyObject *__pyx_v_filt = 0;
  PyObject *__pyx_v_fft_size = 0;
  PyObject *__pyx_v_filter_size = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("make_convolve (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_inp,&__pyx_n_s_filt,&__pyx_n_s_fft_size,&__pyx_n_s_filter_size,0};
    PyObject* values[4] = {0,0,0,0};
    values[2] = ((PyObject *)((PyObject *)__pyx_int_512));
    values[3] = ((PyObject *)((PyObject *)Py_None));
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  4: values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_inp)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 4228, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_filt)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 4228, __pyx_L3_error)
        else {
          __Pyx_RaiseArgtupleInvalid("make_convolve", 0, 2, 4, 1); __PYX_ERR(0, 4228, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_fft_size);
          if (value) { values[2] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 4228, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_filter_size);
          if (value) { values[3] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 4228, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "make_convolve") < 0)) __PYX_ERR(0, 4228, __pyx_L3_error)
      }
    } else {
      switch (__pyx_nargs) {
        case  4: values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_inp = values[0];
    __pyx_v_filt = values[1];
    __pyx_v_fft_size = values[2];
    __pyx_v_filter_size = values[3];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("make_convolve", 0, 2, 4, __pyx_nargs); __PYX_ERR(0, 4228, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.make_convolve", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pysndlib_3clm_472make_convolve(__pyx_self, __pyx_v_inp, __pyx_v_filt, __pyx_v_fft_size, __pyx_v_filter_size);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
static PyObject *__pyx_pf_8pysndlib_3clm_472make_convolve(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_inp, PyObject *__pyx_v_filt, PyObject *__pyx_v_fft_size, PyObject *__pyx_v_filter_size) {
  struct __pyx_obj_8pysndlib_3clm___pyx_scope_struct_1_make_convolve *__pyx_cur_scope;
  input_cb __pyx_v_cy_input_f_ptr;
  __Pyx_memviewslice __pyx_v_filt_view = { 0, 0, { 0 }, { 0 }, { 0 } };
  PyObject *__pyx_v_fft_len = NULL;
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_res = NULL;
  PyObject *__pyx_v_inp_f = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("make_convolve", 0);
  __pyx_cur_scope = (struct __pyx_obj_8pysndlib_3clm___pyx_scope_struct_1_make_convolve *)__pyx_tp_new_8pysndlib_3clm___pyx_scope_struct_1_make_convolve(__pyx_ptype_8pysndlib_3clm___pyx_scope_struct_1_make_convolve, __pyx_empty_tuple, NULL);
  if (unlikely(!__pyx_cur_scope)) {
    __pyx_cur_scope = ((struct __pyx_obj_8pysndlib_3clm___pyx_scope_struct_1_make_convolve *)Py_None);
    __Pyx_INCREF(Py_None);
    __PYX_ERR(0, 4228, __pyx_L1_error)
  } else {
    __Pyx_GOTREF((PyObject *)__pyx_cur_scope);
  }
  __pyx_cur_scope->__pyx_v_inp = __pyx_v_inp;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_inp);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_inp);
  __Pyx_INCREF(__pyx_v_filt);
  __Pyx_INCREF(__pyx_v_fft_size);
  __Pyx_INCREF(__pyx_v_filter_size);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __PYX_XCLEAR_MEMVIEW(&__pyx_t_9, 1);
  __Pyx_XDECREF(__pyx_t_13);
  __Pyx_AddTraceback("pysndlib.clm.make_convolve", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __PYX_XCLEAR_MEMVIEW(&__pyx_v_filt_view, 1);
  __Pyx_XDECREF(__pyx_v_fft_len);
  __Pyx_XDECREF((PyObject *)__pyx_v_res);
  __Pyx_XDECREF(__pyx_v_inp_f);
  __Pyx_XDECREF(__pyx_v_filt);
  __Pyx_XDECREF(__pyx_v_fft_size);
  __Pyx_XDECREF(__pyx_v_filter_size);
  __Pyx_DECREF((PyObject *)__pyx_cur_scope);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__487 = PyTuple_Pack(10, __pyx_n_s_inp, __pyx_n_s_filt, __pyx_n_s_fft_size, __pyx_n_s_filter_size, __pyx_n_s_cy_input_f_ptr, __pyx_n_s_filt_view, __pyx_n_s_fft_len, __pyx_n_s_res, __pyx_n_s_inp_f, __pyx_n_s_inp_f); if (unlikely(!__pyx_tuple__487)) __PYX_ERR(0, 4228, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__487);
  __Pyx_GIVEREF(__pyx_tuple__487);
  __pyx_codeobj__488 = (PyObject*)__Pyx_PyCode_New(4, 0, 0, 10, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__487, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_make_convolve, 4228, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__488)) __PYX_ERR(0, 4228, __pyx_L1_error)
/* … */
  __pyx_t_41 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 4228, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  if (PyDict_SetItem(__pyx_t_41, __pyx_n_s_fft_size, __pyx_kp_s_Optional_int) < 0) __PYX_ERR(0, 4228, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_41, __pyx_n_s_filter_size, __pyx_kp_s_Optional_int) < 0) __PYX_ERR(0, 4228, __pyx_L1_error)
  __pyx_t_40 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_473make_convolve, 0, __pyx_n_s_make_convolve, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__488)); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 4228, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_40, __pyx_tuple__489);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_40, __pyx_t_41);
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_make_convolve, __pyx_t_40) < 0) __PYX_ERR(0, 4228, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
  __pyx_tuple__489 = PyTuple_Pack(2, ((PyObject *)__pyx_int_512), ((PyObject *)Py_None)); if (unlikely(!__pyx_tuple__489)) __PYX_ERR(0, 4228, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__489);
  __Pyx_GIVEREF(__pyx_tuple__489);
/* … */
struct __pyx_obj_8pysndlib_3clm___pyx_scope_struct_1_make_convolve {
  PyObject_HEAD
  PyObject *__pyx_v_inp;
};

 4229:     """
 4230:     return a new convolution generator which convolves its input with the impulse response 'filter'.
 4231:     
 4232:     :param inp: gen or function to read from
 4233:     :param filt: np.array of filter 
 4234:     :param fft_size: fft size used \in the convolution
 4235:     :param filter_size: how much of filter to use. if None use whole filter
 4236:     :return: convolve gen
 4237:     :rtype: mus_any
 4238:     """
 4239: 
 4240:     cdef cclm.input_cb cy_input_f_ptr
 4241: 
 4242:     cdef double [:] filt_view
 4243: 
 4244: 
+4245:     if filter_size is None:
  __pyx_t_1 = (__pyx_v_filter_size == Py_None);
  if (__pyx_t_1) {
/* … */
  }
+4246:         filter_size = clm_length(filt)
    __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_clm_length); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4246, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_4 = NULL;
    __pyx_t_5 = 0;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
      __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3);
      if (likely(__pyx_t_4)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
        __Pyx_INCREF(__pyx_t_4);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_3, function);
        __pyx_t_5 = 1;
      }
    }
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_v_filt};
      __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_5, 1+__pyx_t_5);
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4246, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    }
    __Pyx_DECREF_SET(__pyx_v_filter_size, __pyx_t_2);
    __pyx_t_2 = 0;
 4247: 
+4248:     fft_len = 0
  __Pyx_INCREF(__pyx_int_0);
  __pyx_v_fft_len = __pyx_int_0;
 4249: 
+4250:     if fft_size < 0 or fft_size == 0:
  __pyx_t_2 = PyObject_RichCompare(__pyx_v_fft_size, __pyx_int_0, Py_LT); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4250, __pyx_L1_error)
  __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_6 < 0))) __PYX_ERR(0, 4250, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (!__pyx_t_6) {
  } else {
    __pyx_t_1 = __pyx_t_6;
    goto __pyx_L5_bool_binop_done;
  }
  __pyx_t_6 = (__Pyx_PyInt_BoolEqObjC(__pyx_v_fft_size, __pyx_int_0, 0, 0)); if (unlikely((__pyx_t_6 < 0))) __PYX_ERR(0, 4250, __pyx_L1_error)
  __pyx_t_1 = __pyx_t_6;
  __pyx_L5_bool_binop_done:;
  if (unlikely(__pyx_t_1)) {
/* … */
  }
+4251:         raise ValueError(f'fft_size must be a positive number greater than 0 not {fft_size}')
    __pyx_t_2 = __Pyx_PyObject_FormatSimple(__pyx_v_fft_size, __pyx_empty_unicode); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4251, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_3 = __Pyx_PyUnicode_Concat(__pyx_kp_u_fft_size_must_be_a_positive_numb, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4251, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4251, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __PYX_ERR(0, 4251, __pyx_L1_error)
 4252: 
+4253:     if fft_size > csndlib.mus_max_malloc():
  __pyx_t_2 = __Pyx_PyInt_From_mus_long_t(mus_max_malloc()); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4253, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = PyObject_RichCompare(__pyx_v_fft_size, __pyx_t_2, Py_GT); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4253, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 4253, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(__pyx_t_1)) {
/* … */
  }
+4254:          raise ValueError(f'fft_size too large. cannot allocate {fft_size} size fft')
    __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4254, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_7 = 0;
    __pyx_t_8 = 127;
    __Pyx_INCREF(__pyx_kp_u_fft_size_too_large_cannot_alloca);
    __pyx_t_7 += 36;
    __Pyx_GIVEREF(__pyx_kp_u_fft_size_too_large_cannot_alloca);
    PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_kp_u_fft_size_too_large_cannot_alloca);
    __pyx_t_2 = __Pyx_PyObject_FormatSimple(__pyx_v_fft_size, __pyx_empty_unicode); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4254, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_8 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_2) > __pyx_t_8) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_2) : __pyx_t_8;
    __pyx_t_7 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_2);
    __Pyx_GIVEREF(__pyx_t_2);
    PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_2);
    __pyx_t_2 = 0;
    __Pyx_INCREF(__pyx_kp_u_size_fft);
    __pyx_t_7 += 9;
    __Pyx_GIVEREF(__pyx_kp_u_size_fft);
    PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_kp_u_size_fft);
    __pyx_t_2 = __Pyx_PyUnicode_Join(__pyx_t_3, 3, __pyx_t_7, __pyx_t_8); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4254, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4254, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_Raise(__pyx_t_3, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __PYX_ERR(0, 4254, __pyx_L1_error)
 4255: 
+4256:     if is_power_of_2(filter_size):
  __pyx_t_3 = __pyx_f_8pysndlib_3clm_is_power_of_2(__pyx_v_filter_size, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4256, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 4256, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (__pyx_t_1) {
/* … */
    goto __pyx_L8;
  }
+4257:         fft_len = filter_size * 2
    __pyx_t_3 = __Pyx_PyInt_MultiplyObjC(__pyx_v_filter_size, __pyx_int_2, 2, 0, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4257, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF_SET(__pyx_v_fft_len, __pyx_t_3);
    __pyx_t_3 = 0;
 4258:     else :
+4259:         fft_len = next_power_of_2(filter_size)
  /*else*/ {
    __pyx_t_3 = __pyx_f_8pysndlib_3clm_next_power_of_2(__pyx_v_filter_size, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4259, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF_SET(__pyx_v_fft_len, __pyx_t_3);
    __pyx_t_3 = 0;
  }
  __pyx_L8:;
 4260: 
+4261:     if fft_size < fft_len:
  __pyx_t_3 = PyObject_RichCompare(__pyx_v_fft_size, __pyx_v_fft_len, Py_LT); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4261, __pyx_L1_error)
  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 4261, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (__pyx_t_1) {
/* … */
  }
+4262:         fft_size = fft_len
    __Pyx_INCREF(__pyx_v_fft_len);
    __Pyx_DECREF_SET(__pyx_v_fft_size, __pyx_v_fft_len);
 4263: 
+4264:     if isinstance(filt, list):
  __pyx_t_1 = PyList_Check(__pyx_v_filt); 
  if (__pyx_t_1) {
/* … */
  }
+4265:         filt = np.array(filt)
    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4265, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_array); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4265, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_2 = NULL;
    __pyx_t_5 = 0;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) {
      __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_4);
      if (likely(__pyx_t_2)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
        __Pyx_INCREF(__pyx_t_2);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_4, function);
        __pyx_t_5 = 1;
      }
    }
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_v_filt};
      __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_5, 1+__pyx_t_5);
      __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
      if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4265, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    }
    __Pyx_DECREF_SET(__pyx_v_filt, __pyx_t_3);
    __pyx_t_3 = 0;
 4266: 
+4267:     check_ndim(filt)
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_check_ndim); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4267, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_2 = NULL;
  __pyx_t_5 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_4);
    if (likely(__pyx_t_2)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
      __Pyx_INCREF(__pyx_t_2);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_4, function);
      __pyx_t_5 = 1;
    }
  }
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_v_filt};
    __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_5, 1+__pyx_t_5);
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4267, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  }
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 4268: 
+4269:     filt_view = filt
  __pyx_t_9 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_filt, PyBUF_WRITABLE); if (unlikely(!__pyx_t_9.memview)) __PYX_ERR(0, 4269, __pyx_L1_error)
  __pyx_v_filt_view = __pyx_t_9;
  __pyx_t_9.memview = NULL;
  __pyx_t_9.data = NULL;
 4270: 
+4271:     if(isinstance(inp, mus_any)):
  __pyx_t_3 = __pyx_cur_scope->__pyx_v_inp;
  __Pyx_INCREF(__pyx_t_3);
  __pyx_t_1 = __Pyx_TypeCheck(__pyx_t_3, __pyx_ptype_8pysndlib_3clm_mus_any); 
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (__pyx_t_1) {
/* … */
  }
+4272:         res = mus_any.from_ptr(cclm.mus_make_convolve(<cclm.input_cb>input_callback_func, &filt_view[0], fft_size, filter_size, <void*>(<mus_any>inp)._ptr))
    __pyx_t_10 = 0;
    __pyx_t_5 = -1;
    if (__pyx_t_10 < 0) {
      __pyx_t_10 += __pyx_v_filt_view.shape[0];
      if (unlikely(__pyx_t_10 < 0)) __pyx_t_5 = 0;
    } else if (unlikely(__pyx_t_10 >= __pyx_v_filt_view.shape[0])) __pyx_t_5 = 0;
    if (unlikely(__pyx_t_5 != -1)) {
      __Pyx_RaiseBufferIndexError(__pyx_t_5);
      __PYX_ERR(0, 4272, __pyx_L1_error)
    }
    __pyx_t_11 = __Pyx_PyInt_As_mus_long_t(__pyx_v_fft_size); if (unlikely((__pyx_t_11 == ((mus_long_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 4272, __pyx_L1_error)
    __pyx_t_12 = __Pyx_PyInt_As_mus_long_t(__pyx_v_filter_size); if (unlikely((__pyx_t_12 == ((mus_long_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 4272, __pyx_L1_error)
    __pyx_t_3 = ((PyObject *)__pyx_vtabptr_8pysndlib_3clm_mus_any->from_ptr(mus_make_convolve(((input_cb)__pyx_f_8pysndlib_3clm_input_callback_func), (&(*((double *) ( /* dim=0 */ (__pyx_v_filt_view.data + __pyx_t_10 * __pyx_v_filt_view.strides[0]) )))), __pyx_t_11, __pyx_t_12, ((void *)((struct __pyx_obj_8pysndlib_3clm_mus_any *)__pyx_cur_scope->__pyx_v_inp)->_ptr)), NULL)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4272, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_v_res = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)__pyx_t_3);
    __pyx_t_3 = 0;
+4273:         res._inputcallback = <cclm.input_cb>input_callback_func
    __pyx_v_res->_inputcallback = ((input_cb)__pyx_f_8pysndlib_3clm_input_callback_func);
+4274:         res.cache_append(filt)
    __pyx_t_3 = ((struct __pyx_vtabstruct_8pysndlib_3clm_mus_any *)__pyx_v_res->__pyx_vtab)->cache_append(__pyx_v_res, __pyx_v_filt, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4274, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+4275:         return res
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF((PyObject *)__pyx_v_res);
    __pyx_r = ((PyObject *)__pyx_v_res);
    goto __pyx_L0;
 4276: 
+4277:     if not callable(inp):
  __pyx_t_3 = __pyx_cur_scope->__pyx_v_inp;
  __Pyx_INCREF(__pyx_t_3);
  __pyx_t_1 = __Pyx_PyCallable_Check(__pyx_t_3); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 4277, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_6 = (!__pyx_t_1);
  if (unlikely(__pyx_t_6)) {
/* … */
  }
+4278:         raise TypeError(f"input needs to be a clm gen or function not a {type(inp)}")
    __pyx_t_3 = __Pyx_PyObject_FormatSimple(((PyObject *)Py_TYPE(__pyx_cur_scope->__pyx_v_inp)), __pyx_empty_unicode); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4278, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_4 = __Pyx_PyUnicode_Concat(__pyx_kp_u_input_needs_to_be_a_clm_gen_or_f, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4278, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_builtin_TypeError, __pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4278, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_Raise(__pyx_t_3, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __PYX_ERR(0, 4278, __pyx_L1_error)
 4279: 
+4280:     @INPUTCALLBACK
/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_13make_convolve_1inp_f(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_8pysndlib_3clm_13make_convolve_1inp_f = {"inp_f", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_13make_convolve_1inp_f, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_8pysndlib_3clm_13make_convolve_1inp_f(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  CYTHON_UNUSED PyObject *__pyx_v_gen = 0;
  PyObject *__pyx_v_d = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("inp_f (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_gen,&__pyx_n_s_d,0};
    PyObject* values[2] = {0,0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_gen)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 4280, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_d)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 4280, __pyx_L3_error)
        else {
          __Pyx_RaiseArgtupleInvalid("inp_f", 1, 2, 2, 1); __PYX_ERR(0, 4280, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "inp_f") < 0)) __PYX_ERR(0, 4280, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 2)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
      values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
    }
    __pyx_v_gen = values[0];
    __pyx_v_d = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("inp_f", 1, 2, 2, __pyx_nargs); __PYX_ERR(0, 4280, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.make_convolve.inp_f", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pysndlib_3clm_13make_convolve_inp_f(__pyx_self, __pyx_v_gen, __pyx_v_d);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_13make_convolve_inp_f(PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_gen, PyObject *__pyx_v_d) {
  struct __pyx_obj_8pysndlib_3clm___pyx_scope_struct_1_make_convolve *__pyx_cur_scope;
  struct __pyx_obj_8pysndlib_3clm___pyx_scope_struct_1_make_convolve *__pyx_outer_scope;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("inp_f", 0);
  __pyx_outer_scope = (struct __pyx_obj_8pysndlib_3clm___pyx_scope_struct_1_make_convolve *) __Pyx_CyFunction_GetClosure(__pyx_self);
  __pyx_cur_scope = __pyx_outer_scope;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("pysndlib.clm.make_convolve.inp_f", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_INPUTCALLBACK); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4280, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_13make_convolve_1inp_f, 0, __pyx_n_s_make_convolve_locals_inp_f, ((PyObject*)__pyx_cur_scope), __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__44)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4280, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_13 = NULL;
  __pyx_t_5 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) {
    __pyx_t_13 = PyMethod_GET_SELF(__pyx_t_4);
    if (likely(__pyx_t_13)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
      __Pyx_INCREF(__pyx_t_13);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_4, function);
      __pyx_t_5 = 1;
    }
  }
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_13, __pyx_t_2};
    __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_5, 1+__pyx_t_5);
    __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4280, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  }
  __pyx_v_inp_f = __pyx_t_3;
  __pyx_t_3 = 0;
/* … */
  __pyx_codeobj__44 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__42, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_inp_f, 4280, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__44)) __PYX_ERR(0, 4280, __pyx_L1_error)
 4281:     def inp_f(gen, d):
+4282:         return inp(d)
  __Pyx_XDECREF(__pyx_r);
  if (unlikely(!__pyx_cur_scope->__pyx_v_inp)) { __Pyx_RaiseClosureNameError("inp"); __PYX_ERR(0, 4282, __pyx_L1_error) }
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_inp);
  __pyx_t_2 = __pyx_cur_scope->__pyx_v_inp; __pyx_t_3 = NULL;
  __pyx_t_4 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
      __pyx_t_4 = 1;
    }
  }
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_v_d};
    __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4);
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4282, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  }
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 4283: 
+4284:     inp_f = INPUTCALLBACK(inp)
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_INPUTCALLBACK); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4284, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_2 = NULL;
  __pyx_t_5 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_4);
    if (likely(__pyx_t_2)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
      __Pyx_INCREF(__pyx_t_2);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_4, function);
      __pyx_t_5 = 1;
    }
  }
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_cur_scope->__pyx_v_inp};
    __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_5, 1+__pyx_t_5);
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4284, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  }
  __Pyx_DECREF_SET(__pyx_v_inp_f, __pyx_t_3);
  __pyx_t_3 = 0;
+4285:     cy_input_f_ptr = (<cclm.input_cb*><size_t>ctypes.addressof(inp_f))[0]
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_ctypes); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4285, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_addressof); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4285, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_4 = NULL;
  __pyx_t_5 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_4)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_4);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
      __pyx_t_5 = 1;
    }
  }
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_v_inp_f};
    __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_5, 1+__pyx_t_5);
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4285, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  }
  __pyx_t_14 = __Pyx_PyInt_As_size_t(__pyx_t_3); if (unlikely((__pyx_t_14 == (size_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 4285, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_v_cy_input_f_ptr = (((input_cb *)((size_t)__pyx_t_14))[0]);
+4286:     res = mus_any.from_ptr(cclm.mus_make_convolve(cy_input_f_ptr, &filt_view[0], fft_size, filter_size, NULL))
  __pyx_t_10 = 0;
  __pyx_t_5 = -1;
  if (__pyx_t_10 < 0) {
    __pyx_t_10 += __pyx_v_filt_view.shape[0];
    if (unlikely(__pyx_t_10 < 0)) __pyx_t_5 = 0;
  } else if (unlikely(__pyx_t_10 >= __pyx_v_filt_view.shape[0])) __pyx_t_5 = 0;
  if (unlikely(__pyx_t_5 != -1)) {
    __Pyx_RaiseBufferIndexError(__pyx_t_5);
    __PYX_ERR(0, 4286, __pyx_L1_error)
  }
  __pyx_t_12 = __Pyx_PyInt_As_mus_long_t(__pyx_v_fft_size); if (unlikely((__pyx_t_12 == ((mus_long_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 4286, __pyx_L1_error)
  __pyx_t_11 = __Pyx_PyInt_As_mus_long_t(__pyx_v_filter_size); if (unlikely((__pyx_t_11 == ((mus_long_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 4286, __pyx_L1_error)
  __pyx_t_3 = ((PyObject *)__pyx_vtabptr_8pysndlib_3clm_mus_any->from_ptr(mus_make_convolve(__pyx_v_cy_input_f_ptr, (&(*((double *) ( /* dim=0 */ (__pyx_v_filt_view.data + __pyx_t_10 * __pyx_v_filt_view.strides[0]) )))), __pyx_t_12, __pyx_t_11, NULL), NULL)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4286, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_v_res = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)__pyx_t_3);
  __pyx_t_3 = 0;
+4287:     res._inputcallback = cy_input_f_ptr
  __pyx_v_res->_inputcallback = __pyx_v_cy_input_f_ptr;
+4288:     res.cache_append(inp_f)
  __pyx_t_3 = ((struct __pyx_vtabstruct_8pysndlib_3clm_mus_any *)__pyx_v_res->__pyx_vtab)->cache_append(__pyx_v_res, __pyx_v_inp_f, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4288, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 4289: 
+4290:     return res
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF((PyObject *)__pyx_v_res);
  __pyx_r = ((PyObject *)__pyx_v_res);
  goto __pyx_L0;
 4291: 
 4292: 
+4293: cpdef cython.double convolve(gen: mus_any):
static PyObject *__pyx_pw_8pysndlib_3clm_475convolve(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static double __pyx_f_8pysndlib_3clm_convolve(struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen, CYTHON_UNUSED int __pyx_skip_dispatch) {
  double __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("convolve", 0);
/* … */
  /* function exit code */
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_475convolve(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_474convolve, "\n    next sample from convolution generator.\n    \n    :param gen: convolve gen\n    :rtype: float\n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_475convolve = {"convolve", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_475convolve, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_474convolve};
static PyObject *__pyx_pw_8pysndlib_3clm_475convolve(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("convolve (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_gen,0};
    PyObject* values[1] = {0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_gen)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 4293, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "convolve") < 0)) __PYX_ERR(0, 4293, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
    }
    __pyx_v_gen = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)values[0]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("convolve", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 4293, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.convolve", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_gen), __pyx_ptype_8pysndlib_3clm_mus_any, 0, "gen", 0))) __PYX_ERR(0, 4293, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pysndlib_3clm_474convolve(__pyx_self, __pyx_v_gen);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_474convolve(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("convolve", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_8pysndlib_3clm_convolve(__pyx_v_gen, 0); if (unlikely(__pyx_t_1 == ((double)-1) && PyErr_Occurred())) __PYX_ERR(0, 4293, __pyx_L1_error)
  __pyx_t_2 = PyFloat_FromDouble(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4293, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pysndlib.clm.convolve", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_40 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 4293, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  if (PyDict_SetItem(__pyx_t_40, __pyx_n_s_gen, __pyx_n_s_mus_any) < 0) __PYX_ERR(0, 4293, __pyx_L1_error)
  __pyx_t_41 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_475convolve, 0, __pyx_n_s_convolve, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__490)); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 4293, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_41, __pyx_t_40);
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_convolve, __pyx_t_41) < 0) __PYX_ERR(0, 4293, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
/* … */
  __pyx_codeobj__490 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__46, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_convolve, 4293, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__490)) __PYX_ERR(0, 4293, __pyx_L1_error)
 4294:     """
 4295:     next sample from convolution generator.
 4296:     
 4297:     :param gen: convolve gen
 4298:     :rtype: float
 4299:     """
+4300:     return cclm.mus_convolve(gen._ptr, gen._inputcallback)
  __pyx_r = mus_convolve(__pyx_v_gen->_ptr, __pyx_v_gen->_inputcallback);
  goto __pyx_L0;
 4301: 
+4302: cpdef bint is_convolve(gen: mus_any):
static PyObject *__pyx_pw_8pysndlib_3clm_477is_convolve(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static int __pyx_f_8pysndlib_3clm_is_convolve(struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen, CYTHON_UNUSED int __pyx_skip_dispatch) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_convolve", 0);
/* … */
  /* function exit code */
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_477is_convolve(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_476is_convolve, "\n    returns True if gen is a convolve.\n    \n    :param gen: gen\n    :rtype: bool\n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_477is_convolve = {"is_convolve", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_477is_convolve, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_476is_convolve};
static PyObject *__pyx_pw_8pysndlib_3clm_477is_convolve(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_convolve (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_gen,0};
    PyObject* values[1] = {0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_gen)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 4302, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "is_convolve") < 0)) __PYX_ERR(0, 4302, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
    }
    __pyx_v_gen = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)values[0]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("is_convolve", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 4302, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.is_convolve", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_gen), __pyx_ptype_8pysndlib_3clm_mus_any, 0, "gen", 0))) __PYX_ERR(0, 4302, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pysndlib_3clm_476is_convolve(__pyx_self, __pyx_v_gen);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_476is_convolve(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_convolve", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_8pysndlib_3clm_is_convolve(__pyx_v_gen, 0); if (unlikely(__pyx_t_1 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 4302, __pyx_L1_error)
  __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4302, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pysndlib.clm.is_convolve", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_41 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 4302, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  if (PyDict_SetItem(__pyx_t_41, __pyx_n_s_gen, __pyx_n_s_mus_any) < 0) __PYX_ERR(0, 4302, __pyx_L1_error)
  __pyx_t_40 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_477is_convolve, 0, __pyx_n_s_is_convolve, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__491)); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 4302, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_40, __pyx_t_41);
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_is_convolve, __pyx_t_40) < 0) __PYX_ERR(0, 4302, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
/* … */
  __pyx_codeobj__491 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__46, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_is_convolve, 4302, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__491)) __PYX_ERR(0, 4302, __pyx_L1_error)
 4303:     """
 4304:     returns True if gen is a convolve.
 4305:     
 4306:     :param gen: gen
 4307:     :rtype: bool
 4308:     """
+4309:     return cclm.mus_is_convolve(gen._ptr)
  __pyx_r = mus_is_convolve(__pyx_v_gen->_ptr);
  goto __pyx_L0;
 4310: 
 4311: 
 4312: # --------------- granulate ---------------- 
+4313: def make_granulate(inp,
/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_479make_granulate(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_478make_granulate, "\n    return a new granular synthesis generator.  'length' is the grain length (seconds), 'expansion' is the\n    ratio \\in timing between the new and old (expansion > 1.0 slows things down), 'scaler' scales the grains\n    to avoid overflows, 'hop' is the spacing (seconds) between successive grains upon output. 'jitter'\n    controls the randomness \\in that spacing, 'input' can be a file pointer. 'edit' can be a function of one\n    arg, the current granulate generator.  it is called just before a grain is added into the output\n    buffer. the current grain is accessible via mus_data. the edit function, if any, should return the\n    length \\in samples of the grain, or 0.\n    \n    :param inp: gen or function to read from. if a callback, the function takes 1 input, the direction and should return read value\n    :param expansion: how much to lengthen or compress the file\n    :param length: length of file slices that are overlapped\n    :param scaler: amplitude scaler on slices (to avoid overflows)\n    :param hop: speed at which slices are repeated \\in output\n    :param ramp: amount of slice-time spent ramping up/down\n    :param jitter: affects spacing of successive grains\n    :param max_size: internal buffer size\n    :param edit: grain editing function. the function should take one argument, the granulate mus_any and return length of grain or 0\n\n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_479make_granulate = {"make_granulate", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_479make_granulate, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_478make_granulate};
static PyObject *__pyx_pw_8pysndlib_3clm_479make_granulate(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_inp = 0;
  PyObject *__pyx_v_expansion = 0;
  PyObject *__pyx_v_length = 0;
  PyObject *__pyx_v_scaler = 0;
  PyObject *__pyx_v_hop = 0;
  PyObject *__pyx_v_ramp = 0;
  PyObject *__pyx_v_jitter = 0;
  PyObject *__pyx_v_max_size = 0;
  PyObject *__pyx_v_edit = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("make_granulate (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_inp,&__pyx_n_s_expansion,&__pyx_n_s_length,&__pyx_n_s_scaler,&__pyx_n_s_hop,&__pyx_n_s_ramp,&__pyx_n_s_jitter,&__pyx_n_s_max_size,&__pyx_n_s_edit,0};
    PyObject* values[9] = {0,0,0,0,0,0,0,0,0};
    values[1] = ((PyObject *)((PyObject*)__pyx_float_1_0));
    values[2] = ((PyObject *)((PyObject*)__pyx_float__15));
    values[3] = ((PyObject *)((PyObject*)__pyx_float__6));
    values[4] = ((PyObject *)((PyObject*)__pyx_float__05));
    values[5] = ((PyObject *)((PyObject*)__pyx_float__4));
    values[6] = ((PyObject *)((PyObject*)__pyx_float_0_0));
    values[7] = ((PyObject *)((PyObject *)__pyx_int_0));
/* … */
  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
static PyObject *__pyx_pf_8pysndlib_3clm_478make_granulate(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_inp, PyObject *__pyx_v_expansion, PyObject *__pyx_v_length, PyObject *__pyx_v_scaler, PyObject *__pyx_v_hop, PyObject *__pyx_v_ramp, PyObject *__pyx_v_jitter, PyObject *__pyx_v_max_size, PyObject *__pyx_v_edit) {
  struct __pyx_obj_8pysndlib_3clm___pyx_scope_struct_2_make_granulate *__pyx_cur_scope;
  edit_cb __pyx_v_cy_edit_f_ptr;
  PyObject *__pyx_v_inp_f = 0;
  input_cb __pyx_v_cy_inp_f_ptr;
  PyObject *__pyx_v_edit_f = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("make_granulate", 0);
  __pyx_cur_scope = (struct __pyx_obj_8pysndlib_3clm___pyx_scope_struct_2_make_granulate *)__pyx_tp_new_8pysndlib_3clm___pyx_scope_struct_2_make_granulate(__pyx_ptype_8pysndlib_3clm___pyx_scope_struct_2_make_granulate, __pyx_empty_tuple, NULL);
  if (unlikely(!__pyx_cur_scope)) {
    __pyx_cur_scope = ((struct __pyx_obj_8pysndlib_3clm___pyx_scope_struct_2_make_granulate *)Py_None);
    __Pyx_INCREF(Py_None);
    __PYX_ERR(0, 4313, __pyx_L1_error)
  } else {
    __Pyx_GOTREF((PyObject *)__pyx_cur_scope);
  }
  __pyx_cur_scope->__pyx_v_inp = __pyx_v_inp;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_inp);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_inp);
  __pyx_cur_scope->__pyx_v_edit = __pyx_v_edit;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_edit);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_edit);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_XDECREF(__pyx_t_12);
  __Pyx_XDECREF(__pyx_t_13);
  __Pyx_AddTraceback("pysndlib.clm.make_granulate", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_inp_f);
  __Pyx_XDECREF(__pyx_v_edit_f);
  __Pyx_DECREF((PyObject *)__pyx_cur_scope);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__492 = PyTuple_Pack(17, __pyx_n_s_inp, __pyx_n_s_expansion, __pyx_n_s_length, __pyx_n_s_scaler, __pyx_n_s_hop, __pyx_n_s_ramp, __pyx_n_s_jitter, __pyx_n_s_max_size, __pyx_n_s_edit, __pyx_n_s_cy_input_f_ptr, __pyx_n_s_cy_edit_f_ptr, __pyx_n_s_res, __pyx_n_s_inp_f, __pyx_n_s_inp_f, __pyx_n_s_cy_inp_f_ptr, __pyx_n_s_edit_f, __pyx_n_s_edit_f); if (unlikely(!__pyx_tuple__492)) __PYX_ERR(0, 4313, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__492);
  __Pyx_GIVEREF(__pyx_tuple__492);
  __pyx_codeobj__493 = (PyObject*)__Pyx_PyCode_New(9, 0, 0, 17, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__492, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_make_granulate, 4313, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__493)) __PYX_ERR(0, 4313, __pyx_L1_error)
/* … */
  __pyx_t_40 = __Pyx_PyDict_NewPresized(7); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 4313, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  if (PyDict_SetItem(__pyx_t_40, __pyx_n_s_expansion, __pyx_kp_s_Optional_float) < 0) __PYX_ERR(0, 4313, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_40, __pyx_n_s_length, __pyx_kp_s_Optional_float) < 0) __PYX_ERR(0, 4313, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_40, __pyx_n_s_scaler, __pyx_kp_s_Optional_float) < 0) __PYX_ERR(0, 4313, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_40, __pyx_n_s_hop, __pyx_kp_s_Optional_float) < 0) __PYX_ERR(0, 4313, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_40, __pyx_n_s_ramp, __pyx_kp_s_Optional_float) < 0) __PYX_ERR(0, 4313, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_40, __pyx_n_s_jitter, __pyx_kp_s_Optional_float) < 0) __PYX_ERR(0, 4313, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_40, __pyx_n_s_max_size, __pyx_kp_s_Optional_int) < 0) __PYX_ERR(0, 4313, __pyx_L1_error)
  __pyx_t_41 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_479make_granulate, 0, __pyx_n_s_make_granulate, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__493)); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 4313, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_41, __pyx_tuple__494);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_41, __pyx_t_40);
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_make_granulate, __pyx_t_41) < 0) __PYX_ERR(0, 4313, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
  __pyx_tuple__494 = PyTuple_Pack(8, ((PyObject*)__pyx_float_1_0), ((PyObject*)__pyx_float__15), ((PyObject*)__pyx_float__6), ((PyObject*)__pyx_float__05), ((PyObject*)__pyx_float__4), ((PyObject*)__pyx_float_0_0), ((PyObject *)__pyx_int_0), ((PyObject *)Py_None)); if (unlikely(!__pyx_tuple__494)) __PYX_ERR(0, 4313, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__494);
  __Pyx_GIVEREF(__pyx_tuple__494);
/* … */
struct __pyx_obj_8pysndlib_3clm___pyx_scope_struct_2_make_granulate {
  PyObject_HEAD
  PyObject *__pyx_v_edit;
  PyObject *__pyx_v_inp;
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_res;
};

 4314:                     expansion: Optional[float]=1.0,
 4315:                     length: Optional[float]=.15,
 4316:                     scaler: Optional[float]=.6,
 4317:                     hop: Optional[float]=.05,
 4318:                     ramp: Optional[float]=.4,
 4319:                     jitter: Optional[float]=0.0,
 4320:                     max_size: Optional[int]=0,
+4321:                     edit=None):
    values[8] = ((PyObject *)((PyObject *)Py_None));
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  9: values[8] = __Pyx_Arg_FASTCALL(__pyx_args, 8);
        CYTHON_FALLTHROUGH;
        case  8: values[7] = __Pyx_Arg_FASTCALL(__pyx_args, 7);
        CYTHON_FALLTHROUGH;
        case  7: values[6] = __Pyx_Arg_FASTCALL(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = __Pyx_Arg_FASTCALL(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = __Pyx_Arg_FASTCALL(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_inp)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 4313, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_expansion);
          if (value) { values[1] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 4313, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_length);
          if (value) { values[2] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 4313, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_scaler);
          if (value) { values[3] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 4313, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_hop);
          if (value) { values[4] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 4313, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  5:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_ramp);
          if (value) { values[5] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 4313, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  6:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_jitter);
          if (value) { values[6] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 4313, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  7:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_max_size);
          if (value) { values[7] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 4313, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  8:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_edit);
          if (value) { values[8] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 4313, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "make_granulate") < 0)) __PYX_ERR(0, 4313, __pyx_L3_error)
      }
    } else {
      switch (__pyx_nargs) {
        case  9: values[8] = __Pyx_Arg_FASTCALL(__pyx_args, 8);
        CYTHON_FALLTHROUGH;
        case  8: values[7] = __Pyx_Arg_FASTCALL(__pyx_args, 7);
        CYTHON_FALLTHROUGH;
        case  7: values[6] = __Pyx_Arg_FASTCALL(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = __Pyx_Arg_FASTCALL(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = __Pyx_Arg_FASTCALL(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_inp = values[0];
    __pyx_v_expansion = values[1];
    __pyx_v_length = values[2];
    __pyx_v_scaler = values[3];
    __pyx_v_hop = values[4];
    __pyx_v_ramp = values[5];
    __pyx_v_jitter = values[6];
    __pyx_v_max_size = values[7];
    __pyx_v_edit = values[8];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("make_granulate", 0, 1, 9, __pyx_nargs); __PYX_ERR(0, 4313, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.make_granulate", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pysndlib_3clm_478make_granulate(__pyx_self, __pyx_v_inp, __pyx_v_expansion, __pyx_v_length, __pyx_v_scaler, __pyx_v_hop, __pyx_v_ramp, __pyx_v_jitter, __pyx_v_max_size, __pyx_v_edit);
 4322:                     
 4323:     """
 4324:     return a new granular synthesis generator.  'length' is the grain length (seconds), 'expansion' is the
 4325:     ratio \in timing between the new and old (expansion > 1.0 slows things down), 'scaler' scales the grains
 4326:     to avoid overflows, 'hop' is the spacing (seconds) between successive grains upon output. 'jitter'
 4327:     controls the randomness \in that spacing, 'input' can be a file pointer. 'edit' can be a function of one
 4328:     arg, the current granulate generator.  it is called just before a grain is added into the output
 4329:     buffer. the current grain is accessible via mus_data. the edit function, if any, should return the
 4330:     length \in samples of the grain, or 0.
 4331:     
 4332:     :param inp: gen or function to read from. if a callback, the function takes 1 input, the direction and should return read value
 4333:     :param expansion: how much to lengthen or compress the file
 4334:     :param length: length of file slices that are overlapped
 4335:     :param scaler: amplitude scaler on slices (to avoid overflows)
 4336:     :param hop: speed at which slices are repeated \in output
 4337:     :param ramp: amount of slice-time spent ramping up/down
 4338:     :param jitter: affects spacing of successive grains
 4339:     :param max_size: internal buffer size
 4340:     :param edit: grain editing function. the function should take one argument, the granulate mus_any and return length of grain or 0
 4341: 
 4342:     """
 4343: 
 4344:     cdef cclm.input_cb cy_input_f_ptr
 4345:     cdef cclm.edit_cb cy_edit_f_ptr
 4346: 
+4347:     if(isinstance(inp, mus_any) and edit is None):
  __pyx_t_2 = __pyx_cur_scope->__pyx_v_inp;
  __Pyx_INCREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_TypeCheck(__pyx_t_2, __pyx_ptype_8pysndlib_3clm_mus_any); 
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (__pyx_t_3) {
  } else {
    __pyx_t_1 = __pyx_t_3;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_3 = (__pyx_cur_scope->__pyx_v_edit == Py_None);
  __pyx_t_1 = __pyx_t_3;
  __pyx_L4_bool_binop_done:;
  if (__pyx_t_1) {
/* … */
  }
+4348:         res = mus_any.from_ptr(cclm.mus_make_granulate(<cclm.input_cb>input_callback_func, expansion, length, scaler, hop, ramp, jitter, max_size, NULL, <void*>(<mus_any>inp)._ptr))
    __pyx_t_4 = __pyx_PyFloat_AsDouble(__pyx_v_expansion); if (unlikely((__pyx_t_4 == ((mus_float_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 4348, __pyx_L1_error)
    __pyx_t_5 = __pyx_PyFloat_AsDouble(__pyx_v_length); if (unlikely((__pyx_t_5 == ((mus_float_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 4348, __pyx_L1_error)
    __pyx_t_6 = __pyx_PyFloat_AsDouble(__pyx_v_scaler); if (unlikely((__pyx_t_6 == ((mus_float_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 4348, __pyx_L1_error)
    __pyx_t_7 = __pyx_PyFloat_AsDouble(__pyx_v_hop); if (unlikely((__pyx_t_7 == ((mus_float_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 4348, __pyx_L1_error)
    __pyx_t_8 = __pyx_PyFloat_AsDouble(__pyx_v_ramp); if (unlikely((__pyx_t_8 == ((mus_float_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 4348, __pyx_L1_error)
    __pyx_t_9 = __pyx_PyFloat_AsDouble(__pyx_v_jitter); if (unlikely((__pyx_t_9 == ((mus_float_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 4348, __pyx_L1_error)
    __pyx_t_10 = __Pyx_PyInt_As_int(__pyx_v_max_size); if (unlikely((__pyx_t_10 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 4348, __pyx_L1_error)
    __pyx_t_2 = ((PyObject *)__pyx_vtabptr_8pysndlib_3clm_mus_any->from_ptr(mus_make_granulate(((input_cb)__pyx_f_8pysndlib_3clm_input_callback_func), __pyx_t_4, __pyx_t_5, __pyx_t_6, __pyx_t_7, __pyx_t_8, __pyx_t_9, __pyx_t_10, NULL, ((void *)((struct __pyx_obj_8pysndlib_3clm_mus_any *)__pyx_cur_scope->__pyx_v_inp)->_ptr)), NULL)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4348, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_GIVEREF(__pyx_t_2);
    __pyx_cur_scope->__pyx_v_res = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)__pyx_t_2);
    __pyx_t_2 = 0;
+4349:         res._inputcallback = <cclm.input_cb>input_callback_func
    __pyx_cur_scope->__pyx_v_res->_inputcallback = ((input_cb)__pyx_f_8pysndlib_3clm_input_callback_func);
+4350:         return res
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF((PyObject *)__pyx_cur_scope->__pyx_v_res);
    __pyx_r = ((PyObject *)__pyx_cur_scope->__pyx_v_res);
    goto __pyx_L0;
 4351: 
+4352:     if not callable(inp):
  __pyx_t_2 = __pyx_cur_scope->__pyx_v_inp;
  __Pyx_INCREF(__pyx_t_2);
  __pyx_t_1 = __Pyx_PyCallable_Check(__pyx_t_2); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 4352, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_3 = (!__pyx_t_1);
  if (unlikely(__pyx_t_3)) {
/* … */
  }
+4353:         raise TypeError(f"input needs to be a clm gen or function not a {type(inp)}")
    __pyx_t_2 = __Pyx_PyObject_FormatSimple(((PyObject *)Py_TYPE(__pyx_cur_scope->__pyx_v_inp)), __pyx_empty_unicode); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4353, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_11 = __Pyx_PyUnicode_Concat(__pyx_kp_u_input_needs_to_be_a_clm_gen_or_f, __pyx_t_2); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 4353, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_11);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_builtin_TypeError, __pyx_t_11); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4353, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
    __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __PYX_ERR(0, 4353, __pyx_L1_error)
 4354: 
+4355:     @INPUTCALLBACK
/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_14make_granulate_1inp_f(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_8pysndlib_3clm_14make_granulate_1inp_f = {"inp_f", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_14make_granulate_1inp_f, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_8pysndlib_3clm_14make_granulate_1inp_f(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  CYTHON_UNUSED PyObject *__pyx_v_gen = 0;
  PyObject *__pyx_v_d = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("inp_f (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_gen,&__pyx_n_s_d,0};
    PyObject* values[2] = {0,0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_gen)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 4355, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_d)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 4355, __pyx_L3_error)
        else {
          __Pyx_RaiseArgtupleInvalid("inp_f", 1, 2, 2, 1); __PYX_ERR(0, 4355, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "inp_f") < 0)) __PYX_ERR(0, 4355, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 2)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
      values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
    }
    __pyx_v_gen = values[0];
    __pyx_v_d = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("inp_f", 1, 2, 2, __pyx_nargs); __PYX_ERR(0, 4355, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.make_granulate.inp_f", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pysndlib_3clm_14make_granulate_inp_f(__pyx_self, __pyx_v_gen, __pyx_v_d);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_14make_granulate_inp_f(PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_gen, PyObject *__pyx_v_d) {
  struct __pyx_obj_8pysndlib_3clm___pyx_scope_struct_2_make_granulate *__pyx_cur_scope;
  struct __pyx_obj_8pysndlib_3clm___pyx_scope_struct_2_make_granulate *__pyx_outer_scope;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("inp_f", 0);
  __pyx_outer_scope = (struct __pyx_obj_8pysndlib_3clm___pyx_scope_struct_2_make_granulate *) __Pyx_CyFunction_GetClosure(__pyx_self);
  __pyx_cur_scope = __pyx_outer_scope;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("pysndlib.clm.make_granulate.inp_f", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_n_s_INPUTCALLBACK); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 4355, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_11);
  __pyx_t_12 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_14make_granulate_1inp_f, 0, __pyx_n_s_make_granulate_locals_inp_f, ((PyObject*)__pyx_cur_scope), __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__45)); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 4355, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_12);
  __pyx_t_13 = NULL;
  __pyx_t_10 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_11))) {
    __pyx_t_13 = PyMethod_GET_SELF(__pyx_t_11);
    if (likely(__pyx_t_13)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_11);
      __Pyx_INCREF(__pyx_t_13);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_11, function);
      __pyx_t_10 = 1;
    }
  }
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_13, __pyx_t_12};
    __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_11, __pyx_callargs+1-__pyx_t_10, 1+__pyx_t_10);
    __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
    __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
    if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4355, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
  }
  __pyx_v_inp_f = __pyx_t_2;
  __pyx_t_2 = 0;
/* … */
  __pyx_codeobj__45 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__42, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_inp_f, 4355, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__45)) __PYX_ERR(0, 4355, __pyx_L1_error)
 4356:     def inp_f(gen, d):
+4357:         return inp(d)
  __Pyx_XDECREF(__pyx_r);
  if (unlikely(!__pyx_cur_scope->__pyx_v_inp)) { __Pyx_RaiseClosureNameError("inp"); __PYX_ERR(0, 4357, __pyx_L1_error) }
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_inp);
  __pyx_t_2 = __pyx_cur_scope->__pyx_v_inp; __pyx_t_3 = NULL;
  __pyx_t_4 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
      __pyx_t_4 = 1;
    }
  }
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_v_d};
    __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4);
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4357, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  }
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 4358: 
 4359: 
+4360:     cy_inp_f_ptr = (<cclm.input_cb*><size_t>ctypes.addressof(inp_f))[0]
  __Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_n_s_ctypes); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 4360, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_11);
  __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_n_s_addressof); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 4360, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_12);
  __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
  __pyx_t_11 = NULL;
  __pyx_t_10 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_12))) {
    __pyx_t_11 = PyMethod_GET_SELF(__pyx_t_12);
    if (likely(__pyx_t_11)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_12);
      __Pyx_INCREF(__pyx_t_11);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_12, function);
      __pyx_t_10 = 1;
    }
  }
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_11, __pyx_v_inp_f};
    __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_12, __pyx_callargs+1-__pyx_t_10, 1+__pyx_t_10);
    __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
    if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4360, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
  }
  __pyx_t_14 = __Pyx_PyInt_As_size_t(__pyx_t_2); if (unlikely((__pyx_t_14 == (size_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 4360, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_v_cy_inp_f_ptr = (((input_cb *)((size_t)__pyx_t_14))[0]);
+4361:     res = mus_any.from_ptr(cclm.mus_make_granulate(<cclm.input_cb>cy_inp_f_ptr, expansion, length, scaler, hop, ramp, jitter, max_size, NULL, NULL))
  __pyx_t_9 = __pyx_PyFloat_AsDouble(__pyx_v_expansion); if (unlikely((__pyx_t_9 == ((mus_float_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 4361, __pyx_L1_error)
  __pyx_t_8 = __pyx_PyFloat_AsDouble(__pyx_v_length); if (unlikely((__pyx_t_8 == ((mus_float_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 4361, __pyx_L1_error)
  __pyx_t_7 = __pyx_PyFloat_AsDouble(__pyx_v_scaler); if (unlikely((__pyx_t_7 == ((mus_float_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 4361, __pyx_L1_error)
  __pyx_t_6 = __pyx_PyFloat_AsDouble(__pyx_v_hop); if (unlikely((__pyx_t_6 == ((mus_float_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 4361, __pyx_L1_error)
  __pyx_t_5 = __pyx_PyFloat_AsDouble(__pyx_v_ramp); if (unlikely((__pyx_t_5 == ((mus_float_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 4361, __pyx_L1_error)
  __pyx_t_4 = __pyx_PyFloat_AsDouble(__pyx_v_jitter); if (unlikely((__pyx_t_4 == ((mus_float_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 4361, __pyx_L1_error)
  __pyx_t_10 = __Pyx_PyInt_As_int(__pyx_v_max_size); if (unlikely((__pyx_t_10 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 4361, __pyx_L1_error)
  __pyx_t_2 = ((PyObject *)__pyx_vtabptr_8pysndlib_3clm_mus_any->from_ptr(mus_make_granulate(((input_cb)__pyx_v_cy_inp_f_ptr), __pyx_t_9, __pyx_t_8, __pyx_t_7, __pyx_t_6, __pyx_t_5, __pyx_t_4, __pyx_t_10, NULL, NULL), NULL)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4361, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_2);
  __pyx_cur_scope->__pyx_v_res = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)__pyx_t_2);
  __pyx_t_2 = 0;
+4362:     res._inputcallback = cy_inp_f_ptr
  __pyx_cur_scope->__pyx_v_res->_inputcallback = __pyx_v_cy_inp_f_ptr;
+4363:     res.cache_append(inp_f)
  __pyx_t_2 = ((struct __pyx_vtabstruct_8pysndlib_3clm_mus_any *)__pyx_cur_scope->__pyx_v_res->__pyx_vtab)->cache_append(__pyx_cur_scope->__pyx_v_res, __pyx_v_inp_f, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4363, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 4364: 
+4365:     if(edit is None):
  __pyx_t_3 = (__pyx_cur_scope->__pyx_v_edit == Py_None);
  if (__pyx_t_3) {
/* … */
  }
+4366:         return res
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF((PyObject *)__pyx_cur_scope->__pyx_v_res);
    __pyx_r = ((PyObject *)__pyx_cur_scope->__pyx_v_res);
    goto __pyx_L0;
 4367: 
+4368:     @EDITCALLBACK
/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_14make_granulate_3edit_f(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_8pysndlib_3clm_14make_granulate_3edit_f = {"edit_f", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_14make_granulate_3edit_f, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_8pysndlib_3clm_14make_granulate_3edit_f(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  CYTHON_UNUSED PyObject *__pyx_v_gen = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("edit_f (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_gen,0};
    PyObject* values[1] = {0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_gen)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 4368, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "edit_f") < 0)) __PYX_ERR(0, 4368, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
    }
    __pyx_v_gen = values[0];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("edit_f", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 4368, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.make_granulate.edit_f", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pysndlib_3clm_14make_granulate_2edit_f(__pyx_self, __pyx_v_gen);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_14make_granulate_2edit_f(PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_gen) {
  struct __pyx_obj_8pysndlib_3clm___pyx_scope_struct_2_make_granulate *__pyx_cur_scope;
  struct __pyx_obj_8pysndlib_3clm___pyx_scope_struct_2_make_granulate *__pyx_outer_scope;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("edit_f", 0);
  __pyx_outer_scope = (struct __pyx_obj_8pysndlib_3clm___pyx_scope_struct_2_make_granulate *) __Pyx_CyFunction_GetClosure(__pyx_self);
  __pyx_cur_scope = __pyx_outer_scope;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("pysndlib.clm.make_granulate.edit_f", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __Pyx_GetModuleGlobalName(__pyx_t_12, __pyx_n_s_EDITCALLBACK); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 4368, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_12);
/* … */
  __pyx_tuple__46 = PyTuple_Pack(1, __pyx_n_s_gen); if (unlikely(!__pyx_tuple__46)) __PYX_ERR(0, 4368, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__46);
  __Pyx_GIVEREF(__pyx_tuple__46);
  __pyx_t_11 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_14make_granulate_3edit_f, 0, __pyx_n_s_make_granulate_locals_edit_f, ((PyObject*)__pyx_cur_scope), __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__47)); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 4368, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_11);
  __pyx_t_13 = NULL;
  __pyx_t_10 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_12))) {
    __pyx_t_13 = PyMethod_GET_SELF(__pyx_t_12);
    if (likely(__pyx_t_13)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_12);
      __Pyx_INCREF(__pyx_t_13);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_12, function);
      __pyx_t_10 = 1;
    }
  }
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_13, __pyx_t_11};
    __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_12, __pyx_callargs+1-__pyx_t_10, 1+__pyx_t_10);
    __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
    __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
    if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4368, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
  }
  __pyx_v_edit_f = __pyx_t_2;
  __pyx_t_2 = 0;
  __pyx_codeobj__47 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__46, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_edit_f, 4368, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__47)) __PYX_ERR(0, 4368, __pyx_L1_error)
 4369:     def edit_f(gen):
+4370:         return edit(res)
  __Pyx_XDECREF(__pyx_r);
  if (unlikely(!__pyx_cur_scope->__pyx_v_edit)) { __Pyx_RaiseClosureNameError("edit"); __PYX_ERR(0, 4370, __pyx_L1_error) }
  if (unlikely(!__pyx_cur_scope->__pyx_v_res)) { __Pyx_RaiseClosureNameError("res"); __PYX_ERR(0, 4370, __pyx_L1_error) }
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_edit);
  __pyx_t_2 = __pyx_cur_scope->__pyx_v_edit; __pyx_t_3 = NULL;
  __pyx_t_4 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
      __pyx_t_4 = 1;
    }
  }
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_3, ((PyObject *)__pyx_cur_scope->__pyx_v_res)};
    __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4);
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4370, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  }
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 4371: 
+4372:     cy_edit_f_ptr = (<cclm.edit_cb*><size_t>ctypes.addressof(edit_f))[0]
  __Pyx_GetModuleGlobalName(__pyx_t_12, __pyx_n_s_ctypes); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 4372, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_12);
  __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_12, __pyx_n_s_addressof); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 4372, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_11);
  __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
  __pyx_t_12 = NULL;
  __pyx_t_10 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_11))) {
    __pyx_t_12 = PyMethod_GET_SELF(__pyx_t_11);
    if (likely(__pyx_t_12)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_11);
      __Pyx_INCREF(__pyx_t_12);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_11, function);
      __pyx_t_10 = 1;
    }
  }
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_12, __pyx_v_edit_f};
    __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_11, __pyx_callargs+1-__pyx_t_10, 1+__pyx_t_10);
    __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
    if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4372, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
  }
  __pyx_t_14 = __Pyx_PyInt_As_size_t(__pyx_t_2); if (unlikely((__pyx_t_14 == (size_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 4372, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_v_cy_edit_f_ptr = (((edit_cb *)((size_t)__pyx_t_14))[0]);
+4373:     cclm.mus_granulate_set_edit_function(res._ptr, cy_edit_f_ptr)
  mus_granulate_set_edit_function(__pyx_cur_scope->__pyx_v_res->_ptr, __pyx_v_cy_edit_f_ptr);
+4374:     res._editcallback  = cy_edit_f_ptr
  __pyx_cur_scope->__pyx_v_res->_editcallback = __pyx_v_cy_edit_f_ptr;
+4375:     res.cache_append(edit_f)
  __pyx_t_2 = ((struct __pyx_vtabstruct_8pysndlib_3clm_mus_any *)__pyx_cur_scope->__pyx_v_res->__pyx_vtab)->cache_append(__pyx_cur_scope->__pyx_v_res, __pyx_v_edit_f, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4375, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 4376: 
+4377:     return res
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF((PyObject *)__pyx_cur_scope->__pyx_v_res);
  __pyx_r = ((PyObject *)__pyx_cur_scope->__pyx_v_res);
  goto __pyx_L0;
 4378: 
 4379: #todo: mus_granulate_grain_max_length
+4380: cpdef cython.double granulate(gen: mus_any):
static PyObject *__pyx_pw_8pysndlib_3clm_481granulate(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static double __pyx_f_8pysndlib_3clm_granulate(struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen, CYTHON_UNUSED int __pyx_skip_dispatch) {
  double __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("granulate", 0);
/* … */
  /* function exit code */
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_481granulate(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_480granulate, "\n    next sample from granular synthesis generator.\n    \n    :param gen: granulate gen\n    :rtype: float\n    \n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_481granulate = {"granulate", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_481granulate, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_480granulate};
static PyObject *__pyx_pw_8pysndlib_3clm_481granulate(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("granulate (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_gen,0};
    PyObject* values[1] = {0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_gen)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 4380, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "granulate") < 0)) __PYX_ERR(0, 4380, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
    }
    __pyx_v_gen = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)values[0]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("granulate", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 4380, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.granulate", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_gen), __pyx_ptype_8pysndlib_3clm_mus_any, 0, "gen", 0))) __PYX_ERR(0, 4380, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pysndlib_3clm_480granulate(__pyx_self, __pyx_v_gen);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_480granulate(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("granulate", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_8pysndlib_3clm_granulate(__pyx_v_gen, 0); if (unlikely(__pyx_t_1 == ((double)-1) && PyErr_Occurred())) __PYX_ERR(0, 4380, __pyx_L1_error)
  __pyx_t_2 = PyFloat_FromDouble(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4380, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pysndlib.clm.granulate", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_41 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 4380, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  if (PyDict_SetItem(__pyx_t_41, __pyx_n_s_gen, __pyx_n_s_mus_any) < 0) __PYX_ERR(0, 4380, __pyx_L1_error)
  __pyx_t_40 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_481granulate, 0, __pyx_n_s_granulate, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__495)); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 4380, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_40, __pyx_t_41);
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_granulate, __pyx_t_40) < 0) __PYX_ERR(0, 4380, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
/* … */
  __pyx_codeobj__495 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__46, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_granulate, 4380, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__495)) __PYX_ERR(0, 4380, __pyx_L1_error)
 4381:     """
 4382:     next sample from granular synthesis generator.
 4383:     
 4384:     :param gen: granulate gen
 4385:     :rtype: float
 4386:     
 4387:     """
+4388:     if gen._editcallback is not NULL:
  __pyx_t_1 = (__pyx_v_gen->_editcallback != NULL);
  if (__pyx_t_1) {
/* … */
  }
+4389:         return cclm.mus_granulate_with_editor(gen._ptr, <cclm.input_cb>gen._inputcallback, <cclm.edit_cb>gen._editcallback)
    __pyx_r = mus_granulate_with_editor(__pyx_v_gen->_ptr, ((input_cb)__pyx_v_gen->_inputcallback), ((edit_cb)__pyx_v_gen->_editcallback));
    goto __pyx_L0;
 4390:     else:
+4391:         return cclm.mus_granulate(gen._ptr, <cclm.input_cb>gen._inputcallback)
  /*else*/ {
    __pyx_r = mus_granulate(__pyx_v_gen->_ptr, ((input_cb)__pyx_v_gen->_inputcallback));
    goto __pyx_L0;
  }
 4392: 
 4393: 
+4394: cpdef bint is_granulate(e: mus_any):
static PyObject *__pyx_pw_8pysndlib_3clm_483is_granulate(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static int __pyx_f_8pysndlib_3clm_is_granulate(struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_e, CYTHON_UNUSED int __pyx_skip_dispatch) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_granulate", 0);
/* … */
  /* function exit code */
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_483is_granulate(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_482is_granulate, "\n    returns True if gen is a granulate.\n    \n    :param gen: gen\n    :rtype: bool\n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_483is_granulate = {"is_granulate", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_483is_granulate, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_482is_granulate};
static PyObject *__pyx_pw_8pysndlib_3clm_483is_granulate(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_e = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_granulate (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_e,0};
    PyObject* values[1] = {0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_e)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 4394, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "is_granulate") < 0)) __PYX_ERR(0, 4394, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
    }
    __pyx_v_e = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)values[0]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("is_granulate", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 4394, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.is_granulate", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_e), __pyx_ptype_8pysndlib_3clm_mus_any, 0, "e", 0))) __PYX_ERR(0, 4394, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pysndlib_3clm_482is_granulate(__pyx_self, __pyx_v_e);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_482is_granulate(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_e) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_granulate", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_8pysndlib_3clm_is_granulate(__pyx_v_e, 0); if (unlikely(__pyx_t_1 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 4394, __pyx_L1_error)
  __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4394, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pysndlib.clm.is_granulate", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__496 = PyTuple_Pack(1, __pyx_n_s_e); if (unlikely(!__pyx_tuple__496)) __PYX_ERR(0, 4394, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__496);
  __Pyx_GIVEREF(__pyx_tuple__496);
/* … */
  __pyx_t_40 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 4394, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  if (PyDict_SetItem(__pyx_t_40, __pyx_n_s_e, __pyx_n_s_mus_any) < 0) __PYX_ERR(0, 4394, __pyx_L1_error)
  __pyx_t_41 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_483is_granulate, 0, __pyx_n_s_is_granulate, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__497)); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 4394, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_41, __pyx_t_40);
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_is_granulate, __pyx_t_41) < 0) __PYX_ERR(0, 4394, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
  __pyx_codeobj__497 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__496, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_is_granulate, 4394, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__497)) __PYX_ERR(0, 4394, __pyx_L1_error)
 4395:     """
 4396:     returns True if gen is a granulate.
 4397:     
 4398:     :param gen: gen
 4399:     :rtype: bool
 4400:     """
+4401:     return cclm.mus_is_granulate(e._ptr)
  __pyx_r = mus_is_granulate(__pyx_v_e->_ptr);
  goto __pyx_L0;
 4402: 
 4403: #--------------- phase-vocoder ----------------#
+4404: def make_phase_vocoder(inp,
/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_485make_phase_vocoder(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_484make_phase_vocoder, "\n    return a new phase-vocoder generator; input is the input function (it can be set at run-time),\n    analyze, edit, and synthesize are either None or functions that replace the default innards of the\n    generator, fft_size, overlap and interp set the fft_size, the amount of overlap between ffts, and the\n    time between new analysis calls. 'analyze', if given, takes 2 args, the generator and the input\n    function; if it returns True, the default analysis code is also called.  'edit', if given, takes 1 arg,\n    the generator; if it returns True, the default edit code is run.  'synthesize' is a function of 1 arg,\n    the generator; it is called to get the current vocoder output.\n    \n    :param inp: gen or function to read from. if a callback, the function takes 1 input, the direction and should return read value\n    :param fft_size: fft size used\n    :param overlap: how many analysis stages overlap\n    :param interp: samples between fft\n    :param pitch: pitch scaling ratio\n    :param analyze: if used, overrides default. should be a function of two arguments, the generator and the input function. \n    :param edit: if used, overrides default. functions of one argument, the phase_vocoder mus_any. change amplitudes and phases\n    :param synthesize: if used, overrides default. unctions of one argument, the phase_vocoder mus_any.\n    :return: phase_vocoder gen\n    \n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_485make_phase_vocoder = {"make_phase_vocoder", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_485make_phase_vocoder, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_484make_phase_vocoder};
static PyObject *__pyx_pw_8pysndlib_3clm_485make_phase_vocoder(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_inp = 0;
  PyObject *__pyx_v_fft_size = 0;
  PyObject *__pyx_v_overlap = 0;
  PyObject *__pyx_v_interp = 0;
  PyObject *__pyx_v_pitch = 0;
  PyObject *__pyx_v_analyze = 0;
  PyObject *__pyx_v_edit = 0;
  PyObject *__pyx_v_synthesize = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("make_phase_vocoder (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_inp,&__pyx_n_s_fft_size,&__pyx_n_s_overlap,&__pyx_n_s_interp,&__pyx_n_s_pitch,&__pyx_n_s_analyze,&__pyx_n_s_edit,&__pyx_n_s_synthesize,0};
    PyObject* values[8] = {0,0,0,0,0,0,0,0};
    values[1] = ((PyObject *)((PyObject *)__pyx_int_512));
    values[2] = ((PyObject *)((PyObject *)__pyx_int_4));
    values[3] = ((PyObject *)((PyObject *)__pyx_int_128));
    values[4] = ((PyObject *)((PyObject*)__pyx_float_1_0));
/* … */
  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
static PyObject *__pyx_pf_8pysndlib_3clm_484make_phase_vocoder(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_inp, PyObject *__pyx_v_fft_size, PyObject *__pyx_v_overlap, PyObject *__pyx_v_interp, PyObject *__pyx_v_pitch, PyObject *__pyx_v_analyze, PyObject *__pyx_v_edit, PyObject *__pyx_v_synthesize) {
  struct __pyx_obj_8pysndlib_3clm___pyx_scope_struct_3_make_phase_vocoder *__pyx_cur_scope;
  input_cb __pyx_v_cy_inp_f_ptr;
  edit_cb __pyx_v_cy_edit_f_ptr;
  analyze_cb __pyx_v_cy_analyze_f_ptr;
  synthesize_cb __pyx_v_cy_synthesize_f_ptr;
  PyObject *__pyx_v_inp_f = 0;
  PyObject *__pyx_v_edit_f = 0;
  PyObject *__pyx_v_analyze_f = 0;
  PyObject *__pyx_v_synthesize_f = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("make_phase_vocoder", 0);
  __pyx_cur_scope = (struct __pyx_obj_8pysndlib_3clm___pyx_scope_struct_3_make_phase_vocoder *)__pyx_tp_new_8pysndlib_3clm___pyx_scope_struct_3_make_phase_vocoder(__pyx_ptype_8pysndlib_3clm___pyx_scope_struct_3_make_phase_vocoder, __pyx_empty_tuple, NULL);
  if (unlikely(!__pyx_cur_scope)) {
    __pyx_cur_scope = ((struct __pyx_obj_8pysndlib_3clm___pyx_scope_struct_3_make_phase_vocoder *)Py_None);
    __Pyx_INCREF(Py_None);
    __PYX_ERR(0, 4404, __pyx_L1_error)
  } else {
    __Pyx_GOTREF((PyObject *)__pyx_cur_scope);
  }
  __pyx_cur_scope->__pyx_v_inp = __pyx_v_inp;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_inp);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_inp);
  __pyx_cur_scope->__pyx_v_analyze = __pyx_v_analyze;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_analyze);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_analyze);
  __pyx_cur_scope->__pyx_v_edit = __pyx_v_edit;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_edit);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_edit);
  __pyx_cur_scope->__pyx_v_synthesize = __pyx_v_synthesize;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_synthesize);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_synthesize);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_XDECREF(__pyx_t_12);
  __Pyx_AddTraceback("pysndlib.clm.make_phase_vocoder", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_inp_f);
  __Pyx_XDECREF(__pyx_v_edit_f);
  __Pyx_XDECREF(__pyx_v_analyze_f);
  __Pyx_XDECREF(__pyx_v_synthesize_f);
  __Pyx_DECREF((PyObject *)__pyx_cur_scope);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__498 = PyTuple_Pack(21, __pyx_n_s_inp, __pyx_n_s_fft_size, __pyx_n_s_overlap, __pyx_n_s_interp, __pyx_n_s_pitch, __pyx_n_s_analyze, __pyx_n_s_edit, __pyx_n_s_synthesize, __pyx_n_s_cy_inp_f_ptr, __pyx_n_s_cy_edit_f_ptr, __pyx_n_s_cy_analyze_f_ptr, __pyx_n_s_cy_synthesize_f_ptr, __pyx_n_s_res, __pyx_n_s_inp_f, __pyx_n_s_inp_f, __pyx_n_s_edit_f, __pyx_n_s_edit_f, __pyx_n_s_analyze_f, __pyx_n_s_analyze_f, __pyx_n_s_synthesize_f, __pyx_n_s_synthesize_f); if (unlikely(!__pyx_tuple__498)) __PYX_ERR(0, 4404, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__498);
  __Pyx_GIVEREF(__pyx_tuple__498);
  __pyx_codeobj__499 = (PyObject*)__Pyx_PyCode_New(8, 0, 0, 21, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__498, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_make_phase_vocoder, 4404, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__499)) __PYX_ERR(0, 4404, __pyx_L1_error)
/* … */
  __pyx_t_41 = __Pyx_PyDict_NewPresized(4); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 4404, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  if (PyDict_SetItem(__pyx_t_41, __pyx_n_s_fft_size, __pyx_kp_s_Optional_int) < 0) __PYX_ERR(0, 4404, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_41, __pyx_n_s_overlap, __pyx_kp_s_Optional_int) < 0) __PYX_ERR(0, 4404, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_41, __pyx_n_s_interp, __pyx_kp_s_Optional_int) < 0) __PYX_ERR(0, 4404, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_41, __pyx_n_s_pitch, __pyx_kp_s_Optional_float) < 0) __PYX_ERR(0, 4404, __pyx_L1_error)
  __pyx_t_40 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_485make_phase_vocoder, 0, __pyx_n_s_make_phase_vocoder, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__499)); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 4404, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_40, __pyx_tuple__500);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_40, __pyx_t_41);
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_make_phase_vocoder, __pyx_t_40) < 0) __PYX_ERR(0, 4404, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
  __pyx_tuple__500 = PyTuple_Pack(7, ((PyObject *)__pyx_int_512), ((PyObject *)__pyx_int_4), ((PyObject *)__pyx_int_128), ((PyObject*)__pyx_float_1_0), ((PyObject *)Py_None), ((PyObject *)Py_None), ((PyObject *)Py_None)); if (unlikely(!__pyx_tuple__500)) __PYX_ERR(0, 4404, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__500);
  __Pyx_GIVEREF(__pyx_tuple__500);
/* … */
struct __pyx_obj_8pysndlib_3clm___pyx_scope_struct_3_make_phase_vocoder {
  PyObject_HEAD
  PyObject *__pyx_v_analyze;
  PyObject *__pyx_v_edit;
  PyObject *__pyx_v_inp;
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_res;
  PyObject *__pyx_v_synthesize;
};

 4405:                         fft_size: Optional[int]=512,
 4406:                         overlap: Optional[int]=4,
 4407:                         interp: Optional[int]=128,
 4408:                         pitch: Optional[float]=1.0,
+4409:                         analyze=None,
    values[5] = ((PyObject *)((PyObject *)Py_None));
+4410:                         edit=None,
    values[6] = ((PyObject *)((PyObject *)Py_None));
+4411:                         synthesize=None):
    values[7] = ((PyObject *)((PyObject *)Py_None));
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  8: values[7] = __Pyx_Arg_FASTCALL(__pyx_args, 7);
        CYTHON_FALLTHROUGH;
        case  7: values[6] = __Pyx_Arg_FASTCALL(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = __Pyx_Arg_FASTCALL(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = __Pyx_Arg_FASTCALL(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_inp)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 4404, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_fft_size);
          if (value) { values[1] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 4404, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_overlap);
          if (value) { values[2] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 4404, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_interp);
          if (value) { values[3] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 4404, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_pitch);
          if (value) { values[4] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 4404, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  5:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_analyze);
          if (value) { values[5] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 4404, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  6:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_edit);
          if (value) { values[6] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 4404, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  7:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_synthesize);
          if (value) { values[7] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 4404, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "make_phase_vocoder") < 0)) __PYX_ERR(0, 4404, __pyx_L3_error)
      }
    } else {
      switch (__pyx_nargs) {
        case  8: values[7] = __Pyx_Arg_FASTCALL(__pyx_args, 7);
        CYTHON_FALLTHROUGH;
        case  7: values[6] = __Pyx_Arg_FASTCALL(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = __Pyx_Arg_FASTCALL(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = __Pyx_Arg_FASTCALL(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_inp = values[0];
    __pyx_v_fft_size = values[1];
    __pyx_v_overlap = values[2];
    __pyx_v_interp = values[3];
    __pyx_v_pitch = values[4];
    __pyx_v_analyze = values[5];
    __pyx_v_edit = values[6];
    __pyx_v_synthesize = values[7];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("make_phase_vocoder", 0, 1, 8, __pyx_nargs); __PYX_ERR(0, 4404, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.make_phase_vocoder", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pysndlib_3clm_484make_phase_vocoder(__pyx_self, __pyx_v_inp, __pyx_v_fft_size, __pyx_v_overlap, __pyx_v_interp, __pyx_v_pitch, __pyx_v_analyze, __pyx_v_edit, __pyx_v_synthesize);
 4412:                         
 4413:     """
 4414:     return a new phase-vocoder generator; input is the input function (it can be set at run-time),
 4415:     analyze, edit, and synthesize are either None or functions that replace the default innards of the
 4416:     generator, fft_size, overlap and interp set the fft_size, the amount of overlap between ffts, and the
 4417:     time between new analysis calls. 'analyze', if given, takes 2 args, the generator and the input
 4418:     function; if it returns True, the default analysis code is also called.  'edit', if given, takes 1 arg,
 4419:     the generator; if it returns True, the default edit code is run.  'synthesize' is a function of 1 arg,
 4420:     the generator; it is called to get the current vocoder output.
 4421:     
 4422:     :param inp: gen or function to read from. if a callback, the function takes 1 input, the direction and should return read value
 4423:     :param fft_size: fft size used
 4424:     :param overlap: how many analysis stages overlap
 4425:     :param interp: samples between fft
 4426:     :param pitch: pitch scaling ratio
 4427:     :param analyze: if used, overrides default. should be a function of two arguments, the generator and the input function. 
 4428:     :param edit: if used, overrides default. functions of one argument, the phase_vocoder mus_any. change amplitudes and phases
 4429:     :param synthesize: if used, overrides default. unctions of one argument, the phase_vocoder mus_any.
 4430:     :return: phase_vocoder gen
 4431:     
 4432:     """
 4433: 
 4434:     cdef cclm.input_cb cy_inp_f_ptr
 4435:     cdef cclm.edit_cb cy_edit_f_ptr
 4436:     cdef cclm.analyze_cb cy_analyze_f_ptr
 4437:     cdef cclm.synthesize_cb cy_synthesize_f_ptr
 4438: 
+4439:     if fft_size <= 1:
  __pyx_t_1 = PyObject_RichCompare(__pyx_v_fft_size, __pyx_int_1, Py_LE); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4439, __pyx_L1_error)
  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 4439, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (unlikely(__pyx_t_2)) {
/* … */
  }
+4440:         raise ValueError(f'fft_size must be a positive number greater than 1 not {fft_size}')
    __pyx_t_1 = __Pyx_PyObject_FormatSimple(__pyx_v_fft_size, __pyx_empty_unicode); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4440, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_3 = __Pyx_PyUnicode_Concat(__pyx_kp_u_fft_size_must_be_a_positive_numb_2, __pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4440, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4440, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_Raise(__pyx_t_1, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __PYX_ERR(0, 4440, __pyx_L1_error)
 4441: 
+4442:     if fft_size > csndlib.mus_max_malloc():
  __pyx_t_1 = __Pyx_PyInt_From_mus_long_t(mus_max_malloc()); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4442, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_3 = PyObject_RichCompare(__pyx_v_fft_size, __pyx_t_1, Py_GT); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4442, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 4442, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(__pyx_t_2)) {
/* … */
  }
+4443:          raise ValueError(f'fft_size too large. cannot allocate {fft_size} size fft')
    __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4443, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_4 = 0;
    __pyx_t_5 = 127;
    __Pyx_INCREF(__pyx_kp_u_fft_size_too_large_cannot_alloca);
    __pyx_t_4 += 36;
    __Pyx_GIVEREF(__pyx_kp_u_fft_size_too_large_cannot_alloca);
    PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_kp_u_fft_size_too_large_cannot_alloca);
    __pyx_t_1 = __Pyx_PyObject_FormatSimple(__pyx_v_fft_size, __pyx_empty_unicode); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4443, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_5 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_1) > __pyx_t_5) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_1) : __pyx_t_5;
    __pyx_t_4 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_1);
    __Pyx_GIVEREF(__pyx_t_1);
    PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_1);
    __pyx_t_1 = 0;
    __Pyx_INCREF(__pyx_kp_u_size_fft);
    __pyx_t_4 += 9;
    __Pyx_GIVEREF(__pyx_kp_u_size_fft);
    PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_kp_u_size_fft);
    __pyx_t_1 = __Pyx_PyUnicode_Join(__pyx_t_3, 3, __pyx_t_4, __pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4443, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4443, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_Raise(__pyx_t_3, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __PYX_ERR(0, 4443, __pyx_L1_error)
 4444: 
+4445:     if not is_power_of_2(fft_size):
  __pyx_t_3 = __pyx_f_8pysndlib_3clm_is_power_of_2(__pyx_v_fft_size, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4445, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 4445, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_6 = (!__pyx_t_2);
  if (unlikely(__pyx_t_6)) {
/* … */
  }
+4446:         raise ValueError(f'fft_size must be power of 2 not {fft_size}')
    __pyx_t_3 = __Pyx_PyObject_FormatSimple(__pyx_v_fft_size, __pyx_empty_unicode); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4446, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_1 = __Pyx_PyUnicode_Concat(__pyx_kp_u_fft_size_must_be_power_of_2_not, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4446, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4446, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_Raise(__pyx_t_3, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __PYX_ERR(0, 4446, __pyx_L1_error)
 4447: 
+4448:     if(isinstance(inp, mus_any)):
  __pyx_t_3 = __pyx_cur_scope->__pyx_v_inp;
  __Pyx_INCREF(__pyx_t_3);
  __pyx_t_6 = __Pyx_TypeCheck(__pyx_t_3, __pyx_ptype_8pysndlib_3clm_mus_any); 
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (__pyx_t_6) {
/* … */
    goto __pyx_L6;
  }
+4449:         res = mus_any.from_ptr(cclm.mus_make_phase_vocoder(<cclm.input_cb>input_callback_func, fft_size, overlap, interp, pitch, NULL, NULL, NULL, <void*>(<mus_any>inp)._ptr))
    __pyx_t_7 = __Pyx_PyInt_As_int(__pyx_v_fft_size); if (unlikely((__pyx_t_7 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 4449, __pyx_L1_error)
    __pyx_t_8 = __Pyx_PyInt_As_int(__pyx_v_overlap); if (unlikely((__pyx_t_8 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 4449, __pyx_L1_error)
    __pyx_t_9 = __Pyx_PyInt_As_int(__pyx_v_interp); if (unlikely((__pyx_t_9 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 4449, __pyx_L1_error)
    __pyx_t_10 = __pyx_PyFloat_AsDouble(__pyx_v_pitch); if (unlikely((__pyx_t_10 == ((mus_float_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 4449, __pyx_L1_error)
    __pyx_t_3 = ((PyObject *)__pyx_vtabptr_8pysndlib_3clm_mus_any->from_ptr(mus_make_phase_vocoder(((input_cb)__pyx_f_8pysndlib_3clm_input_callback_func), __pyx_t_7, __pyx_t_8, __pyx_t_9, __pyx_t_10, NULL, NULL, NULL, ((void *)((struct __pyx_obj_8pysndlib_3clm_mus_any *)__pyx_cur_scope->__pyx_v_inp)->_ptr)), NULL)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4449, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_GIVEREF(__pyx_t_3);
    __pyx_cur_scope->__pyx_v_res = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)__pyx_t_3);
    __pyx_t_3 = 0;
+4450:         res._inputcallback = <cclm.input_cb>input_callback_func
    __pyx_cur_scope->__pyx_v_res->_inputcallback = ((input_cb)__pyx_f_8pysndlib_3clm_input_callback_func);
+4451:         res.cache_append(inp)
    __pyx_t_3 = __pyx_cur_scope->__pyx_v_inp;
    __Pyx_INCREF(__pyx_t_3);
    __pyx_t_1 = ((struct __pyx_vtabstruct_8pysndlib_3clm_mus_any *)__pyx_cur_scope->__pyx_v_res->__pyx_vtab)->cache_append(__pyx_cur_scope->__pyx_v_res, __pyx_t_3, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4451, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+4452:     elif callable(inp):
  __pyx_t_1 = __pyx_cur_scope->__pyx_v_inp;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_t_6 = __Pyx_PyCallable_Check(__pyx_t_1); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(0, 4452, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (likely(__pyx_t_6)) {
/* … */
    goto __pyx_L6;
  }
+4453:         @INPUTCALLBACK
/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_18make_phase_vocoder_1inp_f(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_8pysndlib_3clm_18make_phase_vocoder_1inp_f = {"inp_f", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_18make_phase_vocoder_1inp_f, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_8pysndlib_3clm_18make_phase_vocoder_1inp_f(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  CYTHON_UNUSED PyObject *__pyx_v_gen = 0;
  PyObject *__pyx_v_d = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("inp_f (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_gen,&__pyx_n_s_d,0};
    PyObject* values[2] = {0,0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_gen)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 4453, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_d)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 4453, __pyx_L3_error)
        else {
          __Pyx_RaiseArgtupleInvalid("inp_f", 1, 2, 2, 1); __PYX_ERR(0, 4453, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "inp_f") < 0)) __PYX_ERR(0, 4453, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 2)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
      values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
    }
    __pyx_v_gen = values[0];
    __pyx_v_d = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("inp_f", 1, 2, 2, __pyx_nargs); __PYX_ERR(0, 4453, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.make_phase_vocoder.inp_f", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pysndlib_3clm_18make_phase_vocoder_inp_f(__pyx_self, __pyx_v_gen, __pyx_v_d);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_18make_phase_vocoder_inp_f(PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_gen, PyObject *__pyx_v_d) {
  struct __pyx_obj_8pysndlib_3clm___pyx_scope_struct_3_make_phase_vocoder *__pyx_cur_scope;
  struct __pyx_obj_8pysndlib_3clm___pyx_scope_struct_3_make_phase_vocoder *__pyx_outer_scope;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("inp_f", 0);
  __pyx_outer_scope = (struct __pyx_obj_8pysndlib_3clm___pyx_scope_struct_3_make_phase_vocoder *) __Pyx_CyFunction_GetClosure(__pyx_self);
  __pyx_cur_scope = __pyx_outer_scope;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("pysndlib.clm.make_phase_vocoder.inp_f", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
    __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_INPUTCALLBACK); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4453, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_11 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_18make_phase_vocoder_1inp_f, 0, __pyx_n_s_make_phase_vocoder_locals_inp_f, ((PyObject*)__pyx_cur_scope), __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__48)); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 4453, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_11);
    __pyx_t_12 = NULL;
    __pyx_t_9 = 0;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
      __pyx_t_12 = PyMethod_GET_SELF(__pyx_t_3);
      if (likely(__pyx_t_12)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
        __Pyx_INCREF(__pyx_t_12);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_3, function);
        __pyx_t_9 = 1;
      }
    }
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_12, __pyx_t_11};
      __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_9, 1+__pyx_t_9);
      __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4453, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    }
    __pyx_v_inp_f = __pyx_t_1;
    __pyx_t_1 = 0;
/* … */
  __pyx_codeobj__48 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__42, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_inp_f, 4453, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__48)) __PYX_ERR(0, 4453, __pyx_L1_error)
 4454:         def inp_f(gen, d):
+4455:             return inp(d)
  __Pyx_XDECREF(__pyx_r);
  if (unlikely(!__pyx_cur_scope->__pyx_v_inp)) { __Pyx_RaiseClosureNameError("inp"); __PYX_ERR(0, 4455, __pyx_L1_error) }
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_inp);
  __pyx_t_2 = __pyx_cur_scope->__pyx_v_inp; __pyx_t_3 = NULL;
  __pyx_t_4 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
      __pyx_t_4 = 1;
    }
  }
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_v_d};
    __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4);
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4455, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  }
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
+4456:         cy_inp_f_ptr = (<cclm.input_cb*><size_t>ctypes.addressof(inp_f))[0]
    __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_ctypes); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4456, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_addressof); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 4456, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_11);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_3 = NULL;
    __pyx_t_9 = 0;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_11))) {
      __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_11);
      if (likely(__pyx_t_3)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_11);
        __Pyx_INCREF(__pyx_t_3);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_11, function);
        __pyx_t_9 = 1;
      }
    }
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_v_inp_f};
      __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_11, __pyx_callargs+1-__pyx_t_9, 1+__pyx_t_9);
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4456, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
    }
    __pyx_t_13 = __Pyx_PyInt_As_size_t(__pyx_t_1); if (unlikely((__pyx_t_13 == (size_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 4456, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_v_cy_inp_f_ptr = (((input_cb *)((size_t)__pyx_t_13))[0]);
+4457:         res = mus_any.from_ptr(cclm.mus_make_phase_vocoder(cy_inp_f_ptr, fft_size, overlap, interp, pitch, NULL, NULL, NULL, NULL))
    __pyx_t_9 = __Pyx_PyInt_As_int(__pyx_v_fft_size); if (unlikely((__pyx_t_9 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 4457, __pyx_L1_error)
    __pyx_t_8 = __Pyx_PyInt_As_int(__pyx_v_overlap); if (unlikely((__pyx_t_8 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 4457, __pyx_L1_error)
    __pyx_t_7 = __Pyx_PyInt_As_int(__pyx_v_interp); if (unlikely((__pyx_t_7 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 4457, __pyx_L1_error)
    __pyx_t_10 = __pyx_PyFloat_AsDouble(__pyx_v_pitch); if (unlikely((__pyx_t_10 == ((mus_float_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 4457, __pyx_L1_error)
    __pyx_t_1 = ((PyObject *)__pyx_vtabptr_8pysndlib_3clm_mus_any->from_ptr(mus_make_phase_vocoder(__pyx_v_cy_inp_f_ptr, __pyx_t_9, __pyx_t_8, __pyx_t_7, __pyx_t_10, NULL, NULL, NULL, NULL), NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4457, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_GIVEREF(__pyx_t_1);
    __pyx_cur_scope->__pyx_v_res = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)__pyx_t_1);
    __pyx_t_1 = 0;
+4458:         res._inputcallback = cy_inp_f_ptr
    __pyx_cur_scope->__pyx_v_res->_inputcallback = __pyx_v_cy_inp_f_ptr;
+4459:         res.cache_append(inp_f)
    __pyx_t_1 = ((struct __pyx_vtabstruct_8pysndlib_3clm_mus_any *)__pyx_cur_scope->__pyx_v_res->__pyx_vtab)->cache_append(__pyx_cur_scope->__pyx_v_res, __pyx_v_inp_f, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4459, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 4460: 
 4461:     else:
+4462:         raise TypeError(f"input needs to be a clm gen or a callable not a {type(inp)}")
  /*else*/ {
    __pyx_t_1 = __Pyx_PyObject_FormatSimple(((PyObject *)Py_TYPE(__pyx_cur_scope->__pyx_v_inp)), __pyx_empty_unicode); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4462, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_11 = __Pyx_PyUnicode_Concat(__pyx_kp_u_input_needs_to_be_a_clm_gen_or_a, __pyx_t_1); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 4462, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_11);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_builtin_TypeError, __pyx_t_11); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4462, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
    __Pyx_Raise(__pyx_t_1, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __PYX_ERR(0, 4462, __pyx_L1_error)
  }
  __pyx_L6:;
 4463: 
+4464:     if(edit is not None):
  __pyx_t_6 = (__pyx_cur_scope->__pyx_v_edit != Py_None);
  if (__pyx_t_6) {
/* … */
  }
+4465:         @EDITCALLBACK
/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_18make_phase_vocoder_3edit_f(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_8pysndlib_3clm_18make_phase_vocoder_3edit_f = {"edit_f", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_18make_phase_vocoder_3edit_f, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_8pysndlib_3clm_18make_phase_vocoder_3edit_f(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  CYTHON_UNUSED PyObject *__pyx_v_gen = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("edit_f (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_gen,0};
    PyObject* values[1] = {0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_gen)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 4465, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "edit_f") < 0)) __PYX_ERR(0, 4465, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
    }
    __pyx_v_gen = values[0];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("edit_f", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 4465, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.make_phase_vocoder.edit_f", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pysndlib_3clm_18make_phase_vocoder_2edit_f(__pyx_self, __pyx_v_gen);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_18make_phase_vocoder_2edit_f(PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_gen) {
  struct __pyx_obj_8pysndlib_3clm___pyx_scope_struct_3_make_phase_vocoder *__pyx_cur_scope;
  struct __pyx_obj_8pysndlib_3clm___pyx_scope_struct_3_make_phase_vocoder *__pyx_outer_scope;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("edit_f", 0);
  __pyx_outer_scope = (struct __pyx_obj_8pysndlib_3clm___pyx_scope_struct_3_make_phase_vocoder *) __Pyx_CyFunction_GetClosure(__pyx_self);
  __pyx_cur_scope = __pyx_outer_scope;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("pysndlib.clm.make_phase_vocoder.edit_f", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
    __Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_n_s_EDITCALLBACK); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 4465, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_11);
    __pyx_t_3 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_18make_phase_vocoder_3edit_f, 0, __pyx_n_s_make_phase_vocoder_locals_edit_f, ((PyObject*)__pyx_cur_scope), __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__49)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4465, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_12 = NULL;
    __pyx_t_7 = 0;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_11))) {
      __pyx_t_12 = PyMethod_GET_SELF(__pyx_t_11);
      if (likely(__pyx_t_12)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_11);
        __Pyx_INCREF(__pyx_t_12);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_11, function);
        __pyx_t_7 = 1;
      }
    }
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_12, __pyx_t_3};
      __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_11, __pyx_callargs+1-__pyx_t_7, 1+__pyx_t_7);
      __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4465, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
    }
    __pyx_v_edit_f = __pyx_t_1;
    __pyx_t_1 = 0;
/* … */
  __pyx_codeobj__49 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__46, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_edit_f, 4465, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__49)) __PYX_ERR(0, 4465, __pyx_L1_error)
 4466:         def edit_f(gen):
+4467:             return edit(res)
  __Pyx_XDECREF(__pyx_r);
  if (unlikely(!__pyx_cur_scope->__pyx_v_edit)) { __Pyx_RaiseClosureNameError("edit"); __PYX_ERR(0, 4467, __pyx_L1_error) }
  if (unlikely(!__pyx_cur_scope->__pyx_v_res)) { __Pyx_RaiseClosureNameError("res"); __PYX_ERR(0, 4467, __pyx_L1_error) }
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_edit);
  __pyx_t_2 = __pyx_cur_scope->__pyx_v_edit; __pyx_t_3 = NULL;
  __pyx_t_4 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
      __pyx_t_4 = 1;
    }
  }
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_3, ((PyObject *)__pyx_cur_scope->__pyx_v_res)};
    __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4);
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4467, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  }
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
+4468:         cy_edit_f_ptr = (<cclm.edit_cb*><size_t>ctypes.addressof(edit_f))[0]
    __Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_n_s_ctypes); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 4468, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_11);
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_n_s_addressof); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4468, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
    __pyx_t_11 = NULL;
    __pyx_t_7 = 0;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
      __pyx_t_11 = PyMethod_GET_SELF(__pyx_t_3);
      if (likely(__pyx_t_11)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
        __Pyx_INCREF(__pyx_t_11);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_3, function);
        __pyx_t_7 = 1;
      }
    }
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_11, __pyx_v_edit_f};
      __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_7, 1+__pyx_t_7);
      __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4468, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    }
    __pyx_t_13 = __Pyx_PyInt_As_size_t(__pyx_t_1); if (unlikely((__pyx_t_13 == (size_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 4468, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_v_cy_edit_f_ptr = (((edit_cb *)((size_t)__pyx_t_13))[0]);
+4469:         res._editcallback  = cy_edit_f_ptr
    __pyx_cur_scope->__pyx_v_res->_editcallback = __pyx_v_cy_edit_f_ptr;
+4470:         res.cache_append(edit_f)
    __pyx_t_1 = ((struct __pyx_vtabstruct_8pysndlib_3clm_mus_any *)__pyx_cur_scope->__pyx_v_res->__pyx_vtab)->cache_append(__pyx_cur_scope->__pyx_v_res, __pyx_v_edit_f, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4470, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 4471: 
+4472:     if (analyze is not None):
  __pyx_t_6 = (__pyx_cur_scope->__pyx_v_analyze != Py_None);
  if (__pyx_t_6) {
/* … */
  }
+4473:         @ANALYZECALLBACK
/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_18make_phase_vocoder_5analyze_f(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_8pysndlib_3clm_18make_phase_vocoder_5analyze_f = {"analyze_f", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_18make_phase_vocoder_5analyze_f, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_8pysndlib_3clm_18make_phase_vocoder_5analyze_f(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  CYTHON_UNUSED PyObject *__pyx_v_gen = 0;
  CYTHON_UNUSED PyObject *__pyx_v_func = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("analyze_f (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_gen,&__pyx_n_s_func,0};
    PyObject* values[2] = {0,0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_gen)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 4473, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_func)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 4473, __pyx_L3_error)
        else {
          __Pyx_RaiseArgtupleInvalid("analyze_f", 1, 2, 2, 1); __PYX_ERR(0, 4473, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "analyze_f") < 0)) __PYX_ERR(0, 4473, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 2)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
      values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
    }
    __pyx_v_gen = values[0];
    __pyx_v_func = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("analyze_f", 1, 2, 2, __pyx_nargs); __PYX_ERR(0, 4473, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.make_phase_vocoder.analyze_f", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pysndlib_3clm_18make_phase_vocoder_4analyze_f(__pyx_self, __pyx_v_gen, __pyx_v_func);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_18make_phase_vocoder_4analyze_f(PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_gen, CYTHON_UNUSED PyObject *__pyx_v_func) {
  struct __pyx_obj_8pysndlib_3clm___pyx_scope_struct_3_make_phase_vocoder *__pyx_cur_scope;
  struct __pyx_obj_8pysndlib_3clm___pyx_scope_struct_3_make_phase_vocoder *__pyx_outer_scope;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("analyze_f", 0);
  __pyx_outer_scope = (struct __pyx_obj_8pysndlib_3clm___pyx_scope_struct_3_make_phase_vocoder *) __Pyx_CyFunction_GetClosure(__pyx_self);
  __pyx_cur_scope = __pyx_outer_scope;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("pysndlib.clm.make_phase_vocoder.analyze_f", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
    __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_ANALYZECALLBACK); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4473, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
/* … */
  __pyx_tuple__50 = PyTuple_Pack(2, __pyx_n_s_gen, __pyx_n_s_func); if (unlikely(!__pyx_tuple__50)) __PYX_ERR(0, 4473, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__50);
  __Pyx_GIVEREF(__pyx_tuple__50);
    __pyx_t_11 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_18make_phase_vocoder_5analyze_f, 0, __pyx_n_s_make_phase_vocoder_locals_analyz, ((PyObject*)__pyx_cur_scope), __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__51)); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 4473, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_11);
    __pyx_t_12 = NULL;
    __pyx_t_7 = 0;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
      __pyx_t_12 = PyMethod_GET_SELF(__pyx_t_3);
      if (likely(__pyx_t_12)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
        __Pyx_INCREF(__pyx_t_12);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_3, function);
        __pyx_t_7 = 1;
      }
    }
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_12, __pyx_t_11};
      __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_7, 1+__pyx_t_7);
      __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4473, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    }
    __pyx_v_analyze_f = __pyx_t_1;
    __pyx_t_1 = 0;
  __pyx_codeobj__51 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__50, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_analyze_f, 4473, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__51)) __PYX_ERR(0, 4473, __pyx_L1_error)
 4474:         def analyze_f(gen, func):
+4475:             return analyze(res, inp)
  __Pyx_XDECREF(__pyx_r);
  if (unlikely(!__pyx_cur_scope->__pyx_v_analyze)) { __Pyx_RaiseClosureNameError("analyze"); __PYX_ERR(0, 4475, __pyx_L1_error) }
  if (unlikely(!__pyx_cur_scope->__pyx_v_res)) { __Pyx_RaiseClosureNameError("res"); __PYX_ERR(0, 4475, __pyx_L1_error) }
  if (unlikely(!__pyx_cur_scope->__pyx_v_inp)) { __Pyx_RaiseClosureNameError("inp"); __PYX_ERR(0, 4475, __pyx_L1_error) }
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_analyze);
  __pyx_t_2 = __pyx_cur_scope->__pyx_v_analyze; __pyx_t_3 = NULL;
  __pyx_t_4 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
      __pyx_t_4 = 1;
    }
  }
  {
    PyObject *__pyx_callargs[3] = {__pyx_t_3, ((PyObject *)__pyx_cur_scope->__pyx_v_res), __pyx_cur_scope->__pyx_v_inp};
    __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 2+__pyx_t_4);
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4475, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  }
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
+4476:         cy_analyze_f_ptr = (<cclm.analyze_cb*><size_t>ctypes.addressof(analyze_f))[0]
    __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_ctypes); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4476, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_addressof); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 4476, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_11);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_3 = NULL;
    __pyx_t_7 = 0;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_11))) {
      __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_11);
      if (likely(__pyx_t_3)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_11);
        __Pyx_INCREF(__pyx_t_3);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_11, function);
        __pyx_t_7 = 1;
      }
    }
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_v_analyze_f};
      __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_11, __pyx_callargs+1-__pyx_t_7, 1+__pyx_t_7);
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4476, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
    }
    __pyx_t_13 = __Pyx_PyInt_As_size_t(__pyx_t_1); if (unlikely((__pyx_t_13 == (size_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 4476, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_v_cy_analyze_f_ptr = (((analyze_cb *)((size_t)__pyx_t_13))[0]);
+4477:         res._analyzecallback  = cy_analyze_f_ptr
    __pyx_cur_scope->__pyx_v_res->_analyzecallback = __pyx_v_cy_analyze_f_ptr;
+4478:         res.cache_append(analyze_f)
    __pyx_t_1 = ((struct __pyx_vtabstruct_8pysndlib_3clm_mus_any *)__pyx_cur_scope->__pyx_v_res->__pyx_vtab)->cache_append(__pyx_cur_scope->__pyx_v_res, __pyx_v_analyze_f, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4478, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 4479: 
+4480:     if (synthesize is not None):
  __pyx_t_6 = (__pyx_cur_scope->__pyx_v_synthesize != Py_None);
  if (__pyx_t_6) {
/* … */
  }
+4481:         @SYNTHESIZECALLBACK
/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_18make_phase_vocoder_7synthesize_f(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_8pysndlib_3clm_18make_phase_vocoder_7synthesize_f = {"synthesize_f", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_18make_phase_vocoder_7synthesize_f, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_8pysndlib_3clm_18make_phase_vocoder_7synthesize_f(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  CYTHON_UNUSED PyObject *__pyx_v_gen = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("synthesize_f (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_gen,0};
    PyObject* values[1] = {0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_gen)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 4481, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "synthesize_f") < 0)) __PYX_ERR(0, 4481, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
    }
    __pyx_v_gen = values[0];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("synthesize_f", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 4481, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.make_phase_vocoder.synthesize_f", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pysndlib_3clm_18make_phase_vocoder_6synthesize_f(__pyx_self, __pyx_v_gen);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_18make_phase_vocoder_6synthesize_f(PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_gen) {
  struct __pyx_obj_8pysndlib_3clm___pyx_scope_struct_3_make_phase_vocoder *__pyx_cur_scope;
  struct __pyx_obj_8pysndlib_3clm___pyx_scope_struct_3_make_phase_vocoder *__pyx_outer_scope;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("synthesize_f", 0);
  __pyx_outer_scope = (struct __pyx_obj_8pysndlib_3clm___pyx_scope_struct_3_make_phase_vocoder *) __Pyx_CyFunction_GetClosure(__pyx_self);
  __pyx_cur_scope = __pyx_outer_scope;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("pysndlib.clm.make_phase_vocoder.synthesize_f", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
    __Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_n_s_SYNTHESIZECALLBACK); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 4481, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_11);
    __pyx_t_3 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_18make_phase_vocoder_7synthesize_f, 0, __pyx_n_s_make_phase_vocoder_locals_synthe, ((PyObject*)__pyx_cur_scope), __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__52)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4481, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_12 = NULL;
    __pyx_t_7 = 0;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_11))) {
      __pyx_t_12 = PyMethod_GET_SELF(__pyx_t_11);
      if (likely(__pyx_t_12)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_11);
        __Pyx_INCREF(__pyx_t_12);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_11, function);
        __pyx_t_7 = 1;
      }
    }
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_12, __pyx_t_3};
      __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_11, __pyx_callargs+1-__pyx_t_7, 1+__pyx_t_7);
      __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4481, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
    }
    __pyx_v_synthesize_f = __pyx_t_1;
    __pyx_t_1 = 0;
/* … */
  __pyx_codeobj__52 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__46, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_synthesize_f, 4481, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__52)) __PYX_ERR(0, 4481, __pyx_L1_error)
 4482:         def synthesize_f(gen):
+4483:             return synthesize(res)
  __Pyx_XDECREF(__pyx_r);
  if (unlikely(!__pyx_cur_scope->__pyx_v_synthesize)) { __Pyx_RaiseClosureNameError("synthesize"); __PYX_ERR(0, 4483, __pyx_L1_error) }
  if (unlikely(!__pyx_cur_scope->__pyx_v_res)) { __Pyx_RaiseClosureNameError("res"); __PYX_ERR(0, 4483, __pyx_L1_error) }
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_synthesize);
  __pyx_t_2 = __pyx_cur_scope->__pyx_v_synthesize; __pyx_t_3 = NULL;
  __pyx_t_4 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
      __pyx_t_4 = 1;
    }
  }
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_3, ((PyObject *)__pyx_cur_scope->__pyx_v_res)};
    __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4);
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4483, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  }
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
+4484:         cy_synthesize_f_ptr = (<cclm.synthesize_cb*><size_t>ctypes.addressof(synthesize_f))[0]
    __Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_n_s_ctypes); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 4484, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_11);
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_n_s_addressof); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4484, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
    __pyx_t_11 = NULL;
    __pyx_t_7 = 0;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
      __pyx_t_11 = PyMethod_GET_SELF(__pyx_t_3);
      if (likely(__pyx_t_11)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
        __Pyx_INCREF(__pyx_t_11);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_3, function);
        __pyx_t_7 = 1;
      }
    }
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_11, __pyx_v_synthesize_f};
      __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_7, 1+__pyx_t_7);
      __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4484, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    }
    __pyx_t_13 = __Pyx_PyInt_As_size_t(__pyx_t_1); if (unlikely((__pyx_t_13 == (size_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 4484, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_v_cy_synthesize_f_ptr = (((synthesize_cb *)((size_t)__pyx_t_13))[0]);
+4485:         res._synthesizecallback = cy_synthesize_f_ptr
    __pyx_cur_scope->__pyx_v_res->_synthesizecallback = __pyx_v_cy_synthesize_f_ptr;
+4486:         res.cache_append(synthesize_f)
    __pyx_t_1 = ((struct __pyx_vtabstruct_8pysndlib_3clm_mus_any *)__pyx_cur_scope->__pyx_v_res->__pyx_vtab)->cache_append(__pyx_cur_scope->__pyx_v_res, __pyx_v_synthesize_f, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4486, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 4487: 
+4488:     return res
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF((PyObject *)__pyx_cur_scope->__pyx_v_res);
  __pyx_r = ((PyObject *)__pyx_cur_scope->__pyx_v_res);
  goto __pyx_L0;
 4489: 
 4490: 
+4491: cpdef cython.double phase_vocoder(gen: mus_any):
static PyObject *__pyx_pw_8pysndlib_3clm_487phase_vocoder(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static double __pyx_f_8pysndlib_3clm_phase_vocoder(struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen, CYTHON_UNUSED int __pyx_skip_dispatch) {
  double __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("phase_vocoder", 0);
/* … */
  /* function exit code */
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_487phase_vocoder(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_486phase_vocoder, "\n    next phase vocoder value.\n    \n    :param gen: phase_vocoder gen\n    :rtype: float\n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_487phase_vocoder = {"phase_vocoder", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_487phase_vocoder, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_486phase_vocoder};
static PyObject *__pyx_pw_8pysndlib_3clm_487phase_vocoder(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("phase_vocoder (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_gen,0};
    PyObject* values[1] = {0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_gen)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 4491, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "phase_vocoder") < 0)) __PYX_ERR(0, 4491, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
    }
    __pyx_v_gen = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)values[0]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("phase_vocoder", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 4491, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.phase_vocoder", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_gen), __pyx_ptype_8pysndlib_3clm_mus_any, 0, "gen", 0))) __PYX_ERR(0, 4491, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pysndlib_3clm_486phase_vocoder(__pyx_self, __pyx_v_gen);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_486phase_vocoder(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("phase_vocoder", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_8pysndlib_3clm_phase_vocoder(__pyx_v_gen, 0); if (unlikely(__pyx_t_1 == ((double)-1) && PyErr_Occurred())) __PYX_ERR(0, 4491, __pyx_L1_error)
  __pyx_t_2 = PyFloat_FromDouble(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4491, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pysndlib.clm.phase_vocoder", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_40 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 4491, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  if (PyDict_SetItem(__pyx_t_40, __pyx_n_s_gen, __pyx_n_s_mus_any) < 0) __PYX_ERR(0, 4491, __pyx_L1_error)
  __pyx_t_41 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_487phase_vocoder, 0, __pyx_n_s_phase_vocoder, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__501)); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 4491, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_41, __pyx_t_40);
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_phase_vocoder, __pyx_t_41) < 0) __PYX_ERR(0, 4491, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
/* … */
  __pyx_codeobj__501 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__46, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_phase_vocoder, 4491, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__501)) __PYX_ERR(0, 4491, __pyx_L1_error)
 4492:     """
 4493:     next phase vocoder value.
 4494:     
 4495:     :param gen: phase_vocoder gen
 4496:     :rtype: float
 4497:     """
+4498:     if gen._analyzecallback or gen._synthesizecallback or gen._editcallback :
  __pyx_t_2 = (__pyx_v_gen->_analyzecallback != 0);
  if (!__pyx_t_2) {
  } else {
    __pyx_t_1 = __pyx_t_2;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_2 = (__pyx_v_gen->_synthesizecallback != 0);
  if (!__pyx_t_2) {
  } else {
    __pyx_t_1 = __pyx_t_2;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_2 = (__pyx_v_gen->_editcallback != 0);
  __pyx_t_1 = __pyx_t_2;
  __pyx_L4_bool_binop_done:;
  if (__pyx_t_1) {
/* … */
  }
+4499:         return cclm.mus_phase_vocoder_with_editors(gen._ptr, gen._inputcallback, gen._analyzecallback, gen._editcallback, gen._synthesizecallback)
    __pyx_r = mus_phase_vocoder_with_editors(__pyx_v_gen->_ptr, __pyx_v_gen->_inputcallback, __pyx_v_gen->_analyzecallback, __pyx_v_gen->_editcallback, __pyx_v_gen->_synthesizecallback);
    goto __pyx_L0;
 4500:     else:
+4501:         return cclm.mus_phase_vocoder(gen._ptr, gen._inputcallback)
  /*else*/ {
    __pyx_r = mus_phase_vocoder(__pyx_v_gen->_ptr, __pyx_v_gen->_inputcallback);
    goto __pyx_L0;
  }
 4502: 
+4503: cpdef bint is_phase_vocoder(gen: mus_any):
static PyObject *__pyx_pw_8pysndlib_3clm_489is_phase_vocoder(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static int __pyx_f_8pysndlib_3clm_is_phase_vocoder(struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen, CYTHON_UNUSED int __pyx_skip_dispatch) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_phase_vocoder", 0);
/* … */
  /* function exit code */
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_489is_phase_vocoder(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_488is_phase_vocoder, "\n    returns True if gen is a phase_vocoder.\n    \n    :param gen: gen\n    :rtype: bool\n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_489is_phase_vocoder = {"is_phase_vocoder", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_489is_phase_vocoder, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_488is_phase_vocoder};
static PyObject *__pyx_pw_8pysndlib_3clm_489is_phase_vocoder(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_phase_vocoder (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_gen,0};
    PyObject* values[1] = {0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_gen)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 4503, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "is_phase_vocoder") < 0)) __PYX_ERR(0, 4503, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
    }
    __pyx_v_gen = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)values[0]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("is_phase_vocoder", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 4503, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.is_phase_vocoder", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_gen), __pyx_ptype_8pysndlib_3clm_mus_any, 0, "gen", 0))) __PYX_ERR(0, 4503, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pysndlib_3clm_488is_phase_vocoder(__pyx_self, __pyx_v_gen);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_488is_phase_vocoder(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_phase_vocoder", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_8pysndlib_3clm_is_phase_vocoder(__pyx_v_gen, 0); if (unlikely(__pyx_t_1 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 4503, __pyx_L1_error)
  __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4503, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pysndlib.clm.is_phase_vocoder", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_41 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 4503, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  if (PyDict_SetItem(__pyx_t_41, __pyx_n_s_gen, __pyx_n_s_mus_any) < 0) __PYX_ERR(0, 4503, __pyx_L1_error)
  __pyx_t_40 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_489is_phase_vocoder, 0, __pyx_n_s_is_phase_vocoder, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__502)); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 4503, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_40, __pyx_t_41);
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_is_phase_vocoder, __pyx_t_40) < 0) __PYX_ERR(0, 4503, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
/* … */
  __pyx_codeobj__502 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__46, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_is_phase_vocoder, 4503, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__502)) __PYX_ERR(0, 4503, __pyx_L1_error)
 4504:     """
 4505:     returns True if gen is a phase_vocoder.
 4506:     
 4507:     :param gen: gen
 4508:     :rtype: bool
 4509:     """
+4510:     return cclm.mus_is_phase_vocoder(gen._ptr)
  __pyx_r = mus_is_phase_vocoder(__pyx_v_gen->_ptr);
  goto __pyx_L0;
 4511: 
 4512: 
+4513: cpdef np.ndarray phase_vocoder_amp_increments(gen: mus_any):
static PyObject *__pyx_pw_8pysndlib_3clm_491phase_vocoder_amp_increments(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyArrayObject *__pyx_f_8pysndlib_3clm_phase_vocoder_amp_increments(struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen, CYTHON_UNUSED int __pyx_skip_dispatch) {
  PyArrayObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("phase_vocoder_amp_increments", 0);
/* … */
  /* function exit code */
  __pyx_L0:;
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_491phase_vocoder_amp_increments(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_490phase_vocoder_amp_increments, "\n    returns a ndarray containing the current output sinusoid amplitude increments per sample.\n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_491phase_vocoder_amp_increments = {"phase_vocoder_amp_increments", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_491phase_vocoder_amp_increments, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_490phase_vocoder_amp_increments};
static PyObject *__pyx_pw_8pysndlib_3clm_491phase_vocoder_amp_increments(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("phase_vocoder_amp_increments (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_gen,0};
    PyObject* values[1] = {0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_gen)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 4513, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "phase_vocoder_amp_increments") < 0)) __PYX_ERR(0, 4513, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
    }
    __pyx_v_gen = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)values[0]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("phase_vocoder_amp_increments", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 4513, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.phase_vocoder_amp_increments", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_gen), __pyx_ptype_8pysndlib_3clm_mus_any, 0, "gen", 0))) __PYX_ERR(0, 4513, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pysndlib_3clm_490phase_vocoder_amp_increments(__pyx_self, __pyx_v_gen);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_490phase_vocoder_amp_increments(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("phase_vocoder_amp_increments", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = ((PyObject *)__pyx_f_8pysndlib_3clm_phase_vocoder_amp_increments(__pyx_v_gen, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4513, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pysndlib.clm.phase_vocoder_amp_increments", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_40 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 4513, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  if (PyDict_SetItem(__pyx_t_40, __pyx_n_s_gen, __pyx_n_s_mus_any) < 0) __PYX_ERR(0, 4513, __pyx_L1_error)
  __pyx_t_41 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_491phase_vocoder_amp_increments, 0, __pyx_n_s_phase_vocoder_amp_increments, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__503)); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 4513, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_41, __pyx_t_40);
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_phase_vocoder_amp_increments, __pyx_t_41) < 0) __PYX_ERR(0, 4513, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
/* … */
  __pyx_codeobj__503 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__46, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_phase_vocoder_amp_increments, 4513, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__503)) __PYX_ERR(0, 4513, __pyx_L1_error)
 4514:     """
 4515:     returns a ndarray containing the current output sinusoid amplitude increments per sample.
 4516:     """
+4517:     return gen._pv_amp_increments
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __Pyx_INCREF((PyObject *)__pyx_v_gen->_pv_amp_increments);
  __pyx_r = __pyx_v_gen->_pv_amp_increments;
  goto __pyx_L0;
 4518: 
+4519: cpdef np.ndarray phase_vocoder_amps(gen: mus_any):
static PyObject *__pyx_pw_8pysndlib_3clm_493phase_vocoder_amps(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyArrayObject *__pyx_f_8pysndlib_3clm_phase_vocoder_amps(struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen, CYTHON_UNUSED int __pyx_skip_dispatch) {
  PyArrayObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("phase_vocoder_amps", 0);
/* … */
  /* function exit code */
  __pyx_L0:;
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_493phase_vocoder_amps(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_492phase_vocoder_amps, "\n    returns a ndarray containing the current output sinusoid amplitudes.\n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_493phase_vocoder_amps = {"phase_vocoder_amps", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_493phase_vocoder_amps, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_492phase_vocoder_amps};
static PyObject *__pyx_pw_8pysndlib_3clm_493phase_vocoder_amps(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("phase_vocoder_amps (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_gen,0};
    PyObject* values[1] = {0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_gen)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 4519, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "phase_vocoder_amps") < 0)) __PYX_ERR(0, 4519, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
    }
    __pyx_v_gen = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)values[0]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("phase_vocoder_amps", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 4519, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.phase_vocoder_amps", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_gen), __pyx_ptype_8pysndlib_3clm_mus_any, 0, "gen", 0))) __PYX_ERR(0, 4519, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pysndlib_3clm_492phase_vocoder_amps(__pyx_self, __pyx_v_gen);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_492phase_vocoder_amps(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("phase_vocoder_amps", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = ((PyObject *)__pyx_f_8pysndlib_3clm_phase_vocoder_amps(__pyx_v_gen, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4519, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pysndlib.clm.phase_vocoder_amps", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_41 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 4519, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  if (PyDict_SetItem(__pyx_t_41, __pyx_n_s_gen, __pyx_n_s_mus_any) < 0) __PYX_ERR(0, 4519, __pyx_L1_error)
  __pyx_t_40 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_493phase_vocoder_amps, 0, __pyx_n_s_phase_vocoder_amps, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__504)); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 4519, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_40, __pyx_t_41);
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_phase_vocoder_amps, __pyx_t_40) < 0) __PYX_ERR(0, 4519, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
/* … */
  __pyx_codeobj__504 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__46, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_phase_vocoder_amps, 4519, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__504)) __PYX_ERR(0, 4519, __pyx_L1_error)
 4520:     """
 4521:     returns a ndarray containing the current output sinusoid amplitudes.
 4522:     """
+4523:     return gen._pv_amps
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __Pyx_INCREF((PyObject *)__pyx_v_gen->_pv_amps);
  __pyx_r = __pyx_v_gen->_pv_amps;
  goto __pyx_L0;
 4524: 
+4525: cpdef  np.ndarray phase_vocoder_freqs(gen: mus_any):
static PyObject *__pyx_pw_8pysndlib_3clm_495phase_vocoder_freqs(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyArrayObject *__pyx_f_8pysndlib_3clm_phase_vocoder_freqs(struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen, CYTHON_UNUSED int __pyx_skip_dispatch) {
  PyArrayObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("phase_vocoder_freqs", 0);
/* … */
  /* function exit code */
  __pyx_L0:;
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_495phase_vocoder_freqs(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_494phase_vocoder_freqs, "\n    returns a ndarray containing the current output sinusoid frequencies.\n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_495phase_vocoder_freqs = {"phase_vocoder_freqs", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_495phase_vocoder_freqs, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_494phase_vocoder_freqs};
static PyObject *__pyx_pw_8pysndlib_3clm_495phase_vocoder_freqs(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("phase_vocoder_freqs (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_gen,0};
    PyObject* values[1] = {0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_gen)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 4525, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "phase_vocoder_freqs") < 0)) __PYX_ERR(0, 4525, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
    }
    __pyx_v_gen = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)values[0]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("phase_vocoder_freqs", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 4525, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.phase_vocoder_freqs", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_gen), __pyx_ptype_8pysndlib_3clm_mus_any, 0, "gen", 0))) __PYX_ERR(0, 4525, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pysndlib_3clm_494phase_vocoder_freqs(__pyx_self, __pyx_v_gen);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_494phase_vocoder_freqs(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("phase_vocoder_freqs", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = ((PyObject *)__pyx_f_8pysndlib_3clm_phase_vocoder_freqs(__pyx_v_gen, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4525, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pysndlib.clm.phase_vocoder_freqs", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_40 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 4525, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  if (PyDict_SetItem(__pyx_t_40, __pyx_n_s_gen, __pyx_n_s_mus_any) < 0) __PYX_ERR(0, 4525, __pyx_L1_error)
  __pyx_t_41 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_495phase_vocoder_freqs, 0, __pyx_n_s_phase_vocoder_freqs, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__505)); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 4525, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_41, __pyx_t_40);
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_phase_vocoder_freqs, __pyx_t_41) < 0) __PYX_ERR(0, 4525, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
/* … */
  __pyx_codeobj__505 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__46, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_phase_vocoder_freqs, 4525, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__505)) __PYX_ERR(0, 4525, __pyx_L1_error)
 4526:     """
 4527:     returns a ndarray containing the current output sinusoid frequencies.
 4528:     """
+4529:     return gen._pv_freqs
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __Pyx_INCREF((PyObject *)__pyx_v_gen->_pv_freqs);
  __pyx_r = __pyx_v_gen->_pv_freqs;
  goto __pyx_L0;
 4530: 
+4531: cpdef  np.ndarray phase_vocoder_phases(gen: mus_any):
static PyObject *__pyx_pw_8pysndlib_3clm_497phase_vocoder_phases(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyArrayObject *__pyx_f_8pysndlib_3clm_phase_vocoder_phases(struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen, CYTHON_UNUSED int __pyx_skip_dispatch) {
  PyArrayObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("phase_vocoder_phases", 0);
/* … */
  /* function exit code */
  __pyx_L0:;
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_497phase_vocoder_phases(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_496phase_vocoder_phases, "\n    returns a ndarray containing the current output sinusoid phases.\n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_497phase_vocoder_phases = {"phase_vocoder_phases", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_497phase_vocoder_phases, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_496phase_vocoder_phases};
static PyObject *__pyx_pw_8pysndlib_3clm_497phase_vocoder_phases(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("phase_vocoder_phases (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_gen,0};
    PyObject* values[1] = {0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_gen)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 4531, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "phase_vocoder_phases") < 0)) __PYX_ERR(0, 4531, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
    }
    __pyx_v_gen = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)values[0]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("phase_vocoder_phases", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 4531, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.phase_vocoder_phases", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_gen), __pyx_ptype_8pysndlib_3clm_mus_any, 0, "gen", 0))) __PYX_ERR(0, 4531, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pysndlib_3clm_496phase_vocoder_phases(__pyx_self, __pyx_v_gen);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_496phase_vocoder_phases(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("phase_vocoder_phases", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = ((PyObject *)__pyx_f_8pysndlib_3clm_phase_vocoder_phases(__pyx_v_gen, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4531, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pysndlib.clm.phase_vocoder_phases", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_41 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 4531, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  if (PyDict_SetItem(__pyx_t_41, __pyx_n_s_gen, __pyx_n_s_mus_any) < 0) __PYX_ERR(0, 4531, __pyx_L1_error)
  __pyx_t_40 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_497phase_vocoder_phases, 0, __pyx_n_s_phase_vocoder_phases, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__506)); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 4531, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_40, __pyx_t_41);
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_phase_vocoder_phases, __pyx_t_40) < 0) __PYX_ERR(0, 4531, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
/* … */
  __pyx_codeobj__506 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__46, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_phase_vocoder_phases, 4531, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__506)) __PYX_ERR(0, 4531, __pyx_L1_error)
 4532:     """
 4533:     returns a ndarray containing the current output sinusoid phases.
 4534:     """
+4535:     return gen._pv_phases
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __Pyx_INCREF((PyObject *)__pyx_v_gen->_pv_phases);
  __pyx_r = __pyx_v_gen->_pv_phases;
  goto __pyx_L0;
 4536: 
+4537: cpdef  np.ndarray phase_vocoder_phase_increments(gen: mus_any):
static PyObject *__pyx_pw_8pysndlib_3clm_499phase_vocoder_phase_increments(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyArrayObject *__pyx_f_8pysndlib_3clm_phase_vocoder_phase_increments(struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen, CYTHON_UNUSED int __pyx_skip_dispatch) {
  PyArrayObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("phase_vocoder_phase_increments", 0);
/* … */
  /* function exit code */
  __pyx_L0:;
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_499phase_vocoder_phase_increments(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_498phase_vocoder_phase_increments, "\n    returns a ndarray containing the current output sinusoid phase increments.\n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_499phase_vocoder_phase_increments = {"phase_vocoder_phase_increments", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_499phase_vocoder_phase_increments, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_498phase_vocoder_phase_increments};
static PyObject *__pyx_pw_8pysndlib_3clm_499phase_vocoder_phase_increments(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("phase_vocoder_phase_increments (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_gen,0};
    PyObject* values[1] = {0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_gen)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 4537, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "phase_vocoder_phase_increments") < 0)) __PYX_ERR(0, 4537, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
    }
    __pyx_v_gen = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)values[0]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("phase_vocoder_phase_increments", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 4537, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.phase_vocoder_phase_increments", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_gen), __pyx_ptype_8pysndlib_3clm_mus_any, 0, "gen", 0))) __PYX_ERR(0, 4537, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pysndlib_3clm_498phase_vocoder_phase_increments(__pyx_self, __pyx_v_gen);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_498phase_vocoder_phase_increments(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("phase_vocoder_phase_increments", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = ((PyObject *)__pyx_f_8pysndlib_3clm_phase_vocoder_phase_increments(__pyx_v_gen, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4537, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pysndlib.clm.phase_vocoder_phase_increments", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_40 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 4537, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  if (PyDict_SetItem(__pyx_t_40, __pyx_n_s_gen, __pyx_n_s_mus_any) < 0) __PYX_ERR(0, 4537, __pyx_L1_error)
  __pyx_t_41 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_499phase_vocoder_phase_increments, 0, __pyx_n_s_phase_vocoder_phase_increments, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__507)); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 4537, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_41, __pyx_t_40);
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_phase_vocoder_phase_increments, __pyx_t_41) < 0) __PYX_ERR(0, 4537, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
/* … */
  __pyx_codeobj__507 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__46, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_phase_vocoder_phase_increments, 4537, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__507)) __PYX_ERR(0, 4537, __pyx_L1_error)
 4538:     """
 4539:     returns a ndarray containing the current output sinusoid phase increments.
 4540:     """
+4541:     return gen._pv_phase_increments
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __Pyx_INCREF((PyObject *)__pyx_v_gen->_pv_phase_increments);
  __pyx_r = __pyx_v_gen->_pv_phase_increments;
  goto __pyx_L0;
 4542: 
 4543: # --------------- out-any ---------------- #
+4544: cpdef out_any(loc: int, data: float, channel, output):
static PyObject *__pyx_pw_8pysndlib_3clm_501out_any(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyObject *__pyx_f_8pysndlib_3clm_out_any(PyObject *__pyx_v_loc, double __pyx_v_data, PyObject *__pyx_v_channel, PyObject *__pyx_v_output, CYTHON_UNUSED int __pyx_skip_dispatch) {
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_out = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("out_any", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_AddTraceback("pysndlib.clm.out_any", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_out);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_501out_any(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_500out_any, "\n    add data to output.\n    \n    :param loc: location to write to \\in samples\n    :param data: sample value\n    :param channel: channel to write to \n    :param output: output to write to. can be an appropriately shaped np.ndarray or sample2file\n    :return: data\n    :rtype: float\n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_501out_any = {"out_any", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_501out_any, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_500out_any};
static PyObject *__pyx_pw_8pysndlib_3clm_501out_any(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_loc = 0;
  double __pyx_v_data;
  PyObject *__pyx_v_channel = 0;
  PyObject *__pyx_v_output = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("out_any (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_loc,&__pyx_n_s_data,&__pyx_n_s_channel,&__pyx_n_s_output,0};
    PyObject* values[4] = {0,0,0,0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  4: values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_loc)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 4544, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_data)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 4544, __pyx_L3_error)
        else {
          __Pyx_RaiseArgtupleInvalid("out_any", 1, 4, 4, 1); __PYX_ERR(0, 4544, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_channel)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 4544, __pyx_L3_error)
        else {
          __Pyx_RaiseArgtupleInvalid("out_any", 1, 4, 4, 2); __PYX_ERR(0, 4544, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (likely((values[3] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_output)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 4544, __pyx_L3_error)
        else {
          __Pyx_RaiseArgtupleInvalid("out_any", 1, 4, 4, 3); __PYX_ERR(0, 4544, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "out_any") < 0)) __PYX_ERR(0, 4544, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 4)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
      values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
      values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
      values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3);
    }
    __pyx_v_loc = ((PyObject*)values[0]);
    __pyx_v_data = __pyx_PyFloat_AsDouble(values[1]); if (unlikely((__pyx_v_data == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 4544, __pyx_L3_error)
    __pyx_v_channel = values[2];
    __pyx_v_output = values[3];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("out_any", 1, 4, 4, __pyx_nargs); __PYX_ERR(0, 4544, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.out_any", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_loc), (&PyInt_Type), 0, "loc", 1))) __PYX_ERR(0, 4544, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pysndlib_3clm_500out_any(__pyx_self, __pyx_v_loc, __pyx_v_data, __pyx_v_channel, __pyx_v_output);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_500out_any(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_loc, double __pyx_v_data, PyObject *__pyx_v_channel, PyObject *__pyx_v_output) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("out_any", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_8pysndlib_3clm_out_any(__pyx_v_loc, __pyx_v_data, __pyx_v_channel, __pyx_v_output, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4544, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pysndlib.clm.out_any", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__508 = PyTuple_Pack(4, __pyx_n_s_loc, __pyx_n_s_data, __pyx_n_s_channel, __pyx_n_s_output); if (unlikely(!__pyx_tuple__508)) __PYX_ERR(0, 4544, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__508);
  __Pyx_GIVEREF(__pyx_tuple__508);
/* … */
  __pyx_t_41 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 4544, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  if (PyDict_SetItem(__pyx_t_41, __pyx_n_s_loc, __pyx_n_s_int_2) < 0) __PYX_ERR(0, 4544, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_41, __pyx_n_s_data, __pyx_n_s_float) < 0) __PYX_ERR(0, 4544, __pyx_L1_error)
  __pyx_t_40 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_501out_any, 0, __pyx_n_s_out_any, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__509)); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 4544, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_40, __pyx_t_41);
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_out_any, __pyx_t_40) < 0) __PYX_ERR(0, 4544, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
  __pyx_codeobj__509 = (PyObject*)__Pyx_PyCode_New(4, 0, 0, 4, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__508, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_out_any, 4544, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__509)) __PYX_ERR(0, 4544, __pyx_L1_error)
 4545:     """
 4546:     add data to output.
 4547:     
 4548:     :param loc: location to write to \in samples
 4549:     :param data: sample value
 4550:     :param channel: channel to write to 
 4551:     :param output: output to write to. can be an appropriately shaped np.ndarray or sample2file
 4552:     :return: data
 4553:     :rtype: float
 4554:     """
+4555:     if isinstance(output, np.ndarray):
  __pyx_t_1 = __Pyx_TypeCheck(__pyx_v_output, __pyx_ptype_5numpy_ndarray); 
  if (__pyx_t_1) {
/* … */
    goto __pyx_L3;
  }
+4556:         output[channel][loc] += data
    __pyx_t_2 = __Pyx_PyObject_GetItem(__pyx_v_output, __pyx_v_channel); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4556, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_INCREF(__pyx_v_loc);
    __pyx_t_3 = __pyx_v_loc;
    __pyx_t_4 = __Pyx_PyObject_GetItem(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4556, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_5 = PyFloat_FromDouble(__pyx_v_data); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4556, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_6 = PyNumber_InPlaceAdd(__pyx_t_4, __pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4556, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (unlikely((PyObject_SetItem(__pyx_t_2, __pyx_t_3, __pyx_t_6) < 0))) __PYX_ERR(0, 4556, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 4557:     else:
+4558:         out = <mus_any>output
  /*else*/ {
    __pyx_t_2 = __pyx_v_output;
    __Pyx_INCREF(__pyx_t_2);
    __pyx_v_out = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)__pyx_t_2);
    __pyx_t_2 = 0;
+4559:         cclm.mus_out_any(loc, data, channel, out._ptr)
    __pyx_t_7 = __Pyx_PyInt_As_mus_long_t(__pyx_v_loc); if (unlikely((__pyx_t_7 == ((mus_long_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 4559, __pyx_L1_error)
    __pyx_t_8 = __Pyx_PyInt_As_int(__pyx_v_channel); if (unlikely((__pyx_t_8 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 4559, __pyx_L1_error)
    (void)(mus_out_any(__pyx_t_7, __pyx_v_data, __pyx_t_8, __pyx_v_out->_ptr));
  }
  __pyx_L3:;
+4560:     return data
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = PyFloat_FromDouble(__pyx_v_data); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4560, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;
 4561: # --------------- outa ---------------- #
+4562: cpdef outa(loc: int, data: float, output=None):
static PyObject *__pyx_pw_8pysndlib_3clm_503outa(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyObject *__pyx_f_8pysndlib_3clm_outa(PyObject *__pyx_v_loc, double __pyx_v_data, CYTHON_UNUSED int __pyx_skip_dispatch, struct __pyx_opt_args_8pysndlib_3clm_outa *__pyx_optional_args) {
  PyObject *__pyx_v_output = ((PyObject *)Py_None);
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("outa", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_output = __pyx_optional_args->output;
    }
  }
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("pysndlib.clm.outa", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_503outa(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_502outa, "\n    add data to output \\in channel 0.\n    \n    :param loc: location to write to \\in samples\n    :param data: sample value\n    :param channel: channel to write to \n    :param output: output to write to. can be an appropriately shaped np.ndarray or sample2file\n    :return: data\n    :rtype: float\n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_503outa = {"outa", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_503outa, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_502outa};
static PyObject *__pyx_pw_8pysndlib_3clm_503outa(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_loc = 0;
  double __pyx_v_data;
  PyObject *__pyx_v_output = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("outa (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_loc,&__pyx_n_s_data,&__pyx_n_s_output,0};
    PyObject* values[3] = {0,0,0};
    values[2] = ((PyObject *)Py_None);
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_loc)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 4562, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_data)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 4562, __pyx_L3_error)
        else {
          __Pyx_RaiseArgtupleInvalid("outa", 0, 2, 3, 1); __PYX_ERR(0, 4562, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_output);
          if (value) { values[2] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 4562, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "outa") < 0)) __PYX_ERR(0, 4562, __pyx_L3_error)
      }
    } else {
      switch (__pyx_nargs) {
        case  3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_loc = ((PyObject*)values[0]);
    __pyx_v_data = __pyx_PyFloat_AsDouble(values[1]); if (unlikely((__pyx_v_data == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 4562, __pyx_L3_error)
    __pyx_v_output = values[2];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("outa", 0, 2, 3, __pyx_nargs); __PYX_ERR(0, 4562, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.outa", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_loc), (&PyInt_Type), 0, "loc", 1))) __PYX_ERR(0, 4562, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pysndlib_3clm_502outa(__pyx_self, __pyx_v_loc, __pyx_v_data, __pyx_v_output);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_502outa(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_loc, double __pyx_v_data, PyObject *__pyx_v_output) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("outa", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2.__pyx_n = 1;
  __pyx_t_2.output = __pyx_v_output;
  __pyx_t_1 = __pyx_f_8pysndlib_3clm_outa(__pyx_v_loc, __pyx_v_data, 0, &__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4562, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pysndlib.clm.outa", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__510 = PyTuple_Pack(3, __pyx_n_s_loc, __pyx_n_s_data, __pyx_n_s_output); if (unlikely(!__pyx_tuple__510)) __PYX_ERR(0, 4562, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__510);
  __Pyx_GIVEREF(__pyx_tuple__510);
/* … */
  __pyx_t_40 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 4562, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  if (PyDict_SetItem(__pyx_t_40, __pyx_n_s_loc, __pyx_n_s_int_2) < 0) __PYX_ERR(0, 4562, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_40, __pyx_n_s_data, __pyx_n_s_float) < 0) __PYX_ERR(0, 4562, __pyx_L1_error)
  __pyx_t_41 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_503outa, 0, __pyx_n_s_outa, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__511)); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 4562, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_41, __pyx_tuple__258);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_41, __pyx_t_40);
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_outa, __pyx_t_41) < 0) __PYX_ERR(0, 4562, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
  __pyx_codeobj__511 = (PyObject*)__Pyx_PyCode_New(3, 0, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__510, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_outa, 4562, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__511)) __PYX_ERR(0, 4562, __pyx_L1_error)
/* … */
struct __pyx_opt_args_8pysndlib_3clm_outa {
  int __pyx_n;
  PyObject *output;
};
 4563:     """
 4564:     add data to output \in channel 0.
 4565:     
 4566:     :param loc: location to write to \in samples
 4567:     :param data: sample value
 4568:     :param channel: channel to write to 
 4569:     :param output: output to write to. can be an appropriately shaped np.ndarray or sample2file
 4570:     :return: data
 4571:     :rtype: float
 4572:     """
+4573:     if output is not None:
  __pyx_t_1 = (__pyx_v_output != Py_None);
  if (__pyx_t_1) {
/* … */
    goto __pyx_L3;
  }
+4574:         out_any(loc, data, 0, output)
    __pyx_t_2 = __pyx_f_8pysndlib_3clm_out_any(__pyx_v_loc, __pyx_v_data, __pyx_int_0, __pyx_v_output, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4574, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 4575:     else:
+4576:         out_any(loc, data, 0, CLM.output)
  /*else*/ {
    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_CLM); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4576, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_output); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4576, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_2 = __pyx_f_8pysndlib_3clm_out_any(__pyx_v_loc, __pyx_v_data, __pyx_int_0, __pyx_t_3, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4576, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  }
  __pyx_L3:;
+4577:     return data
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = PyFloat_FromDouble(__pyx_v_data); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4577, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;
 4578: # --------------- outb ---------------- #    
+4579: cpdef outb(loc: int, data: float, output=None):
static PyObject *__pyx_pw_8pysndlib_3clm_505outb(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyObject *__pyx_f_8pysndlib_3clm_outb(PyObject *__pyx_v_loc, double __pyx_v_data, CYTHON_UNUSED int __pyx_skip_dispatch, struct __pyx_opt_args_8pysndlib_3clm_outb *__pyx_optional_args) {
  PyObject *__pyx_v_output = ((PyObject *)Py_None);
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("outb", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_output = __pyx_optional_args->output;
    }
  }
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("pysndlib.clm.outb", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_505outb(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_504outb, "\n    add data to output \\in channel 1.\n    \n    :param loc: location to write to \\in samples\n    :param data: sample value\n    :param channel: channel to write to \n    :param output: output to write to. can be an appropriately shaped np.ndarray or sample2fil\n    :return: data\n    :rtype: float\n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_505outb = {"outb", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_505outb, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_504outb};
static PyObject *__pyx_pw_8pysndlib_3clm_505outb(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_loc = 0;
  double __pyx_v_data;
  PyObject *__pyx_v_output = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("outb (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_loc,&__pyx_n_s_data,&__pyx_n_s_output,0};
    PyObject* values[3] = {0,0,0};
    values[2] = ((PyObject *)Py_None);
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_loc)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 4579, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_data)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 4579, __pyx_L3_error)
        else {
          __Pyx_RaiseArgtupleInvalid("outb", 0, 2, 3, 1); __PYX_ERR(0, 4579, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_output);
          if (value) { values[2] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 4579, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "outb") < 0)) __PYX_ERR(0, 4579, __pyx_L3_error)
      }
    } else {
      switch (__pyx_nargs) {
        case  3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_loc = ((PyObject*)values[0]);
    __pyx_v_data = __pyx_PyFloat_AsDouble(values[1]); if (unlikely((__pyx_v_data == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 4579, __pyx_L3_error)
    __pyx_v_output = values[2];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("outb", 0, 2, 3, __pyx_nargs); __PYX_ERR(0, 4579, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.outb", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_loc), (&PyInt_Type), 0, "loc", 1))) __PYX_ERR(0, 4579, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pysndlib_3clm_504outb(__pyx_self, __pyx_v_loc, __pyx_v_data, __pyx_v_output);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_504outb(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_loc, double __pyx_v_data, PyObject *__pyx_v_output) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("outb", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2.__pyx_n = 1;
  __pyx_t_2.output = __pyx_v_output;
  __pyx_t_1 = __pyx_f_8pysndlib_3clm_outb(__pyx_v_loc, __pyx_v_data, 0, &__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4579, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pysndlib.clm.outb", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_41 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 4579, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  if (PyDict_SetItem(__pyx_t_41, __pyx_n_s_loc, __pyx_n_s_int_2) < 0) __PYX_ERR(0, 4579, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_41, __pyx_n_s_data, __pyx_n_s_float) < 0) __PYX_ERR(0, 4579, __pyx_L1_error)
  __pyx_t_40 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_505outb, 0, __pyx_n_s_outb, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__512)); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 4579, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_40, __pyx_tuple__258);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_40, __pyx_t_41);
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_outb, __pyx_t_40) < 0) __PYX_ERR(0, 4579, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
/* … */
  __pyx_codeobj__512 = (PyObject*)__Pyx_PyCode_New(3, 0, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__510, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_outb, 4579, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__512)) __PYX_ERR(0, 4579, __pyx_L1_error)
/* … */
struct __pyx_opt_args_8pysndlib_3clm_outb {
  int __pyx_n;
  PyObject *output;
};
 4580:     """
 4581:     add data to output \in channel 1.
 4582:     
 4583:     :param loc: location to write to \in samples
 4584:     :param data: sample value
 4585:     :param channel: channel to write to 
 4586:     :param output: output to write to. can be an appropriately shaped np.ndarray or sample2fil
 4587:     :return: data
 4588:     :rtype: float
 4589:     """
+4590:     if output is not None:
  __pyx_t_1 = (__pyx_v_output != Py_None);
  if (__pyx_t_1) {
/* … */
    goto __pyx_L3;
  }
+4591:         out_any(loc, data, 1, output)
    __pyx_t_2 = __pyx_f_8pysndlib_3clm_out_any(__pyx_v_loc, __pyx_v_data, __pyx_int_1, __pyx_v_output, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4591, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 4592:     else:
+4593:         out_any(loc, data, 1, CLM.output)
  /*else*/ {
    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_CLM); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4593, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_output); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4593, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_2 = __pyx_f_8pysndlib_3clm_out_any(__pyx_v_loc, __pyx_v_data, __pyx_int_1, __pyx_t_3, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4593, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  }
  __pyx_L3:;
+4594:     return data
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = PyFloat_FromDouble(__pyx_v_data); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4594, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;
 4595: # --------------- outc ---------------- #    
+4596: cpdef outc(loc: int, data: float, output=None):
static PyObject *__pyx_pw_8pysndlib_3clm_507outc(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyObject *__pyx_f_8pysndlib_3clm_outc(PyObject *__pyx_v_loc, double __pyx_v_data, CYTHON_UNUSED int __pyx_skip_dispatch, struct __pyx_opt_args_8pysndlib_3clm_outc *__pyx_optional_args) {
  PyObject *__pyx_v_output = ((PyObject *)Py_None);
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("outc", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_output = __pyx_optional_args->output;
    }
  }
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("pysndlib.clm.outc", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_507outc(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_506outc, "\n    add data to output \\in channel 2.\n    \n    :param loc: location to write to \\in samples\n    :param data: sample value\n    :param channel: channel to write to \n    :param output: output to write to. can be an appropriately shaped np.ndarray or sample2file\n    :return: data\n    :rtype: float\n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_507outc = {"outc", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_507outc, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_506outc};
static PyObject *__pyx_pw_8pysndlib_3clm_507outc(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_loc = 0;
  double __pyx_v_data;
  PyObject *__pyx_v_output = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("outc (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_loc,&__pyx_n_s_data,&__pyx_n_s_output,0};
    PyObject* values[3] = {0,0,0};
    values[2] = ((PyObject *)Py_None);
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_loc)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 4596, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_data)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 4596, __pyx_L3_error)
        else {
          __Pyx_RaiseArgtupleInvalid("outc", 0, 2, 3, 1); __PYX_ERR(0, 4596, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_output);
          if (value) { values[2] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 4596, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "outc") < 0)) __PYX_ERR(0, 4596, __pyx_L3_error)
      }
    } else {
      switch (__pyx_nargs) {
        case  3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_loc = ((PyObject*)values[0]);
    __pyx_v_data = __pyx_PyFloat_AsDouble(values[1]); if (unlikely((__pyx_v_data == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 4596, __pyx_L3_error)
    __pyx_v_output = values[2];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("outc", 0, 2, 3, __pyx_nargs); __PYX_ERR(0, 4596, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.outc", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_loc), (&PyInt_Type), 0, "loc", 1))) __PYX_ERR(0, 4596, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pysndlib_3clm_506outc(__pyx_self, __pyx_v_loc, __pyx_v_data, __pyx_v_output);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_506outc(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_loc, double __pyx_v_data, PyObject *__pyx_v_output) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("outc", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2.__pyx_n = 1;
  __pyx_t_2.output = __pyx_v_output;
  __pyx_t_1 = __pyx_f_8pysndlib_3clm_outc(__pyx_v_loc, __pyx_v_data, 0, &__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4596, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pysndlib.clm.outc", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_40 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 4596, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  if (PyDict_SetItem(__pyx_t_40, __pyx_n_s_loc, __pyx_n_s_int_2) < 0) __PYX_ERR(0, 4596, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_40, __pyx_n_s_data, __pyx_n_s_float) < 0) __PYX_ERR(0, 4596, __pyx_L1_error)
  __pyx_t_41 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_507outc, 0, __pyx_n_s_outc, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__513)); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 4596, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_41, __pyx_tuple__258);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_41, __pyx_t_40);
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_outc, __pyx_t_41) < 0) __PYX_ERR(0, 4596, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
/* … */
  __pyx_codeobj__513 = (PyObject*)__Pyx_PyCode_New(3, 0, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__510, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_outc, 4596, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__513)) __PYX_ERR(0, 4596, __pyx_L1_error)
/* … */
struct __pyx_opt_args_8pysndlib_3clm_outc {
  int __pyx_n;
  PyObject *output;
};
 4597:     """
 4598:     add data to output \in channel 2.
 4599:     
 4600:     :param loc: location to write to \in samples
 4601:     :param data: sample value
 4602:     :param channel: channel to write to 
 4603:     :param output: output to write to. can be an appropriately shaped np.ndarray or sample2file
 4604:     :return: data
 4605:     :rtype: float
 4606:     """
+4607:     if output is not None:
  __pyx_t_1 = (__pyx_v_output != Py_None);
  if (__pyx_t_1) {
/* … */
    goto __pyx_L3;
  }
+4608:         out_any(loc, data, 2, output)
    __pyx_t_2 = __pyx_f_8pysndlib_3clm_out_any(__pyx_v_loc, __pyx_v_data, __pyx_int_2, __pyx_v_output, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4608, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 4609:     else:
+4610:         out_any(loc, data, 2, CLM.output)
  /*else*/ {
    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_CLM); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4610, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_output); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4610, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_2 = __pyx_f_8pysndlib_3clm_out_any(__pyx_v_loc, __pyx_v_data, __pyx_int_2, __pyx_t_3, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4610, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  }
  __pyx_L3:;
+4611:     return data
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = PyFloat_FromDouble(__pyx_v_data); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4611, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;
 4612: # --------------- outd ---------------- #    
+4613: cpdef outd(loc: int, data: float, output=None):
static PyObject *__pyx_pw_8pysndlib_3clm_509outd(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyObject *__pyx_f_8pysndlib_3clm_outd(PyObject *__pyx_v_loc, double __pyx_v_data, CYTHON_UNUSED int __pyx_skip_dispatch, struct __pyx_opt_args_8pysndlib_3clm_outd *__pyx_optional_args) {
  PyObject *__pyx_v_output = ((PyObject *)Py_None);
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("outd", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_output = __pyx_optional_args->output;
    }
  }
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("pysndlib.clm.outd", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_509outd(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_508outd, "\n    add data to output \\in channel 3.\n    \n    :param loc: location to write to \\in samples\n    :param data: sample value\n    :param channel: channel to write to \n    :param output: output to write to. can be an appropriately shaped np.ndarray or sample2file\n    :return: data\n    :rtype: float\n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_509outd = {"outd", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_509outd, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_508outd};
static PyObject *__pyx_pw_8pysndlib_3clm_509outd(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_loc = 0;
  double __pyx_v_data;
  PyObject *__pyx_v_output = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("outd (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_loc,&__pyx_n_s_data,&__pyx_n_s_output,0};
    PyObject* values[3] = {0,0,0};
    values[2] = ((PyObject *)Py_None);
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_loc)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 4613, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_data)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 4613, __pyx_L3_error)
        else {
          __Pyx_RaiseArgtupleInvalid("outd", 0, 2, 3, 1); __PYX_ERR(0, 4613, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_output);
          if (value) { values[2] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 4613, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "outd") < 0)) __PYX_ERR(0, 4613, __pyx_L3_error)
      }
    } else {
      switch (__pyx_nargs) {
        case  3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_loc = ((PyObject*)values[0]);
    __pyx_v_data = __pyx_PyFloat_AsDouble(values[1]); if (unlikely((__pyx_v_data == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 4613, __pyx_L3_error)
    __pyx_v_output = values[2];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("outd", 0, 2, 3, __pyx_nargs); __PYX_ERR(0, 4613, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.outd", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_loc), (&PyInt_Type), 0, "loc", 1))) __PYX_ERR(0, 4613, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pysndlib_3clm_508outd(__pyx_self, __pyx_v_loc, __pyx_v_data, __pyx_v_output);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_508outd(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_loc, double __pyx_v_data, PyObject *__pyx_v_output) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("outd", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2.__pyx_n = 1;
  __pyx_t_2.output = __pyx_v_output;
  __pyx_t_1 = __pyx_f_8pysndlib_3clm_outd(__pyx_v_loc, __pyx_v_data, 0, &__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4613, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pysndlib.clm.outd", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_41 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 4613, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  if (PyDict_SetItem(__pyx_t_41, __pyx_n_s_loc, __pyx_n_s_int_2) < 0) __PYX_ERR(0, 4613, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_41, __pyx_n_s_data, __pyx_n_s_float) < 0) __PYX_ERR(0, 4613, __pyx_L1_error)
  __pyx_t_40 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_509outd, 0, __pyx_n_s_outd, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__514)); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 4613, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_40, __pyx_tuple__258);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_40, __pyx_t_41);
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_outd, __pyx_t_40) < 0) __PYX_ERR(0, 4613, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
/* … */
  __pyx_codeobj__514 = (PyObject*)__Pyx_PyCode_New(3, 0, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__510, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_outd, 4613, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__514)) __PYX_ERR(0, 4613, __pyx_L1_error)
/* … */
struct __pyx_opt_args_8pysndlib_3clm_outd {
  int __pyx_n;
  PyObject *output;
};
 4614:     """
 4615:     add data to output \in channel 3.
 4616:     
 4617:     :param loc: location to write to \in samples
 4618:     :param data: sample value
 4619:     :param channel: channel to write to 
 4620:     :param output: output to write to. can be an appropriately shaped np.ndarray or sample2file
 4621:     :return: data
 4622:     :rtype: float
 4623:     """
+4624:     if output is not None:
  __pyx_t_1 = (__pyx_v_output != Py_None);
  if (__pyx_t_1) {
/* … */
    goto __pyx_L3;
  }
+4625:         out_any(loc, data, 3, output)
    __pyx_t_2 = __pyx_f_8pysndlib_3clm_out_any(__pyx_v_loc, __pyx_v_data, __pyx_int_3, __pyx_v_output, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4625, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 4626:     else:
+4627:         out_any(loc, data, 3, CLM.output)
  /*else*/ {
    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_CLM); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4627, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_output); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4627, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_2 = __pyx_f_8pysndlib_3clm_out_any(__pyx_v_loc, __pyx_v_data, __pyx_int_3, __pyx_t_3, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4627, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  }
  __pyx_L3:;
+4628:     return data
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = PyFloat_FromDouble(__pyx_v_data); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4628, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;
 4629: 
 4630: # --------------- out-bank ---------------- #    
+4631: cpdef out_bank(gens, loc: int, val: float):
static PyObject *__pyx_pw_8pysndlib_3clm_511out_bank(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyObject *__pyx_f_8pysndlib_3clm_out_bank(PyObject *__pyx_v_gens, PyObject *__pyx_v_loc, double __pyx_v_val, CYTHON_UNUSED int __pyx_skip_dispatch) {
  Py_ssize_t __pyx_v_i;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("out_bank", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_AddTraceback("pysndlib.clm.out_bank", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_511out_bank(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_510out_bank, "\n    calls each generator \\in the gens list, passing it the argument val, then sends that output to the output channels \\in the list order (the first generator writes to outa, the second to outb, etc).\"\n\n    :param gens: gens to call\n    :param loca: location in samples to write to\n    :return: data\n    :rtype: float\n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_511out_bank = {"out_bank", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_511out_bank, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_510out_bank};
static PyObject *__pyx_pw_8pysndlib_3clm_511out_bank(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_gens = 0;
  PyObject *__pyx_v_loc = 0;
  double __pyx_v_val;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("out_bank (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_gens,&__pyx_n_s_loc,&__pyx_n_s_val,0};
    PyObject* values[3] = {0,0,0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_gens)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 4631, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_loc)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 4631, __pyx_L3_error)
        else {
          __Pyx_RaiseArgtupleInvalid("out_bank", 1, 3, 3, 1); __PYX_ERR(0, 4631, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_val)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 4631, __pyx_L3_error)
        else {
          __Pyx_RaiseArgtupleInvalid("out_bank", 1, 3, 3, 2); __PYX_ERR(0, 4631, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "out_bank") < 0)) __PYX_ERR(0, 4631, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 3)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
      values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
      values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
    }
    __pyx_v_gens = values[0];
    __pyx_v_loc = ((PyObject*)values[1]);
    __pyx_v_val = __pyx_PyFloat_AsDouble(values[2]); if (unlikely((__pyx_v_val == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 4631, __pyx_L3_error)
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("out_bank", 1, 3, 3, __pyx_nargs); __PYX_ERR(0, 4631, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.out_bank", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_loc), (&PyInt_Type), 0, "loc", 1))) __PYX_ERR(0, 4631, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pysndlib_3clm_510out_bank(__pyx_self, __pyx_v_gens, __pyx_v_loc, __pyx_v_val);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_510out_bank(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_gens, PyObject *__pyx_v_loc, double __pyx_v_val) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("out_bank", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_8pysndlib_3clm_out_bank(__pyx_v_gens, __pyx_v_loc, __pyx_v_val, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4631, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pysndlib.clm.out_bank", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__515 = PyTuple_Pack(3, __pyx_n_s_gens, __pyx_n_s_loc, __pyx_n_s_val); if (unlikely(!__pyx_tuple__515)) __PYX_ERR(0, 4631, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__515);
  __Pyx_GIVEREF(__pyx_tuple__515);
/* … */
  __pyx_t_40 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 4631, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  if (PyDict_SetItem(__pyx_t_40, __pyx_n_s_loc, __pyx_n_s_int_2) < 0) __PYX_ERR(0, 4631, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_40, __pyx_n_s_val, __pyx_n_s_float) < 0) __PYX_ERR(0, 4631, __pyx_L1_error)
  __pyx_t_41 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_511out_bank, 0, __pyx_n_s_out_bank, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__516)); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 4631, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_41, __pyx_t_40);
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_out_bank, __pyx_t_41) < 0) __PYX_ERR(0, 4631, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
  __pyx_codeobj__516 = (PyObject*)__Pyx_PyCode_New(3, 0, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__515, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_out_bank, 4631, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__516)) __PYX_ERR(0, 4631, __pyx_L1_error)
 4632:     """
 4633:     calls each generator \in the gens list, passing it the argument val, then sends that output to the output channels \in the list order (the first generator writes to outa, the second to outb, etc)."
 4634: 
 4635:     :param gens: gens to call
 4636:     :param loca: location in samples to write to
 4637:     :return: data
 4638:     :rtype: float
 4639:     """
+4640:     for i in range(len(gens)):
  __pyx_t_1 = PyObject_Length(__pyx_v_gens); if (unlikely(__pyx_t_1 == ((Py_ssize_t)-1))) __PYX_ERR(0, 4640, __pyx_L1_error)
  __pyx_t_2 = __pyx_t_1;
  for (__pyx_t_3 = 0; __pyx_t_3 < __pyx_t_2; __pyx_t_3+=1) {
    __pyx_v_i = __pyx_t_3;
+4641:         out_any(loc, cclm.mus_apply(<cclm.mus_any_ptr>gens[i]._ptr, val, 0.), i, CLM.output)
    __pyx_t_4 = __Pyx_GetItemInt(__pyx_v_gens, __pyx_v_i, Py_ssize_t, 1, PyInt_FromSsize_t, 0, 1, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4641, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_ptr); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4641, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_4 = PyInt_FromSsize_t(__pyx_v_i); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4641, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_CLM); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4641, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_output); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4641, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_t_6 = __pyx_f_8pysndlib_3clm_out_any(__pyx_v_loc, mus_apply(((mus_any_ptr)__pyx_t_5), __pyx_v_val, 0.), __pyx_t_4, __pyx_t_7, 0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4641, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  }
+4642:     return val
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_6 = PyFloat_FromDouble(__pyx_v_val); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4642, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_r = __pyx_t_6;
  __pyx_t_6 = 0;
  goto __pyx_L0;
 4643: 
 4644: #--------------- in-any ----------------#
+4645: cpdef in_any(loc: int, channel: int, inp):
static PyObject *__pyx_pw_8pysndlib_3clm_513in_any(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyObject *__pyx_f_8pysndlib_3clm_in_any(PyObject *__pyx_v_loc, PyObject *__pyx_v_channel, PyObject *__pyx_v_inp, CYTHON_UNUSED int __pyx_skip_dispatch) {
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_ipt = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("in_any", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("pysndlib.clm.in_any", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_ipt);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_513in_any(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_512in_any, "\n    input stream sample at loc \\in channel chan.\n    \n    :param loc: location to read from\n    :param channel: channel to read from \n    :param inp: input to read from. can be an appropriately shaped np.ndarray or file2sample\n    :return: data\n    :rtype: float\n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_513in_any = {"in_any", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_513in_any, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_512in_any};
static PyObject *__pyx_pw_8pysndlib_3clm_513in_any(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_loc = 0;
  PyObject *__pyx_v_channel = 0;
  PyObject *__pyx_v_inp = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("in_any (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_loc,&__pyx_n_s_channel,&__pyx_n_s_inp,0};
    PyObject* values[3] = {0,0,0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_loc)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 4645, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_channel)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 4645, __pyx_L3_error)
        else {
          __Pyx_RaiseArgtupleInvalid("in_any", 1, 3, 3, 1); __PYX_ERR(0, 4645, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_inp)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 4645, __pyx_L3_error)
        else {
          __Pyx_RaiseArgtupleInvalid("in_any", 1, 3, 3, 2); __PYX_ERR(0, 4645, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "in_any") < 0)) __PYX_ERR(0, 4645, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 3)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
      values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
      values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
    }
    __pyx_v_loc = ((PyObject*)values[0]);
    __pyx_v_channel = ((PyObject*)values[1]);
    __pyx_v_inp = values[2];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("in_any", 1, 3, 3, __pyx_nargs); __PYX_ERR(0, 4645, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.in_any", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_loc), (&PyInt_Type), 0, "loc", 1))) __PYX_ERR(0, 4645, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_channel), (&PyInt_Type), 0, "channel", 1))) __PYX_ERR(0, 4645, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pysndlib_3clm_512in_any(__pyx_self, __pyx_v_loc, __pyx_v_channel, __pyx_v_inp);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_512in_any(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_loc, PyObject *__pyx_v_channel, PyObject *__pyx_v_inp) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("in_any", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_8pysndlib_3clm_in_any(__pyx_v_loc, __pyx_v_channel, __pyx_v_inp, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4645, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pysndlib.clm.in_any", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__517 = PyTuple_Pack(3, __pyx_n_s_loc, __pyx_n_s_channel, __pyx_n_s_inp); if (unlikely(!__pyx_tuple__517)) __PYX_ERR(0, 4645, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__517);
  __Pyx_GIVEREF(__pyx_tuple__517);
/* … */
  __pyx_t_41 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 4645, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  if (PyDict_SetItem(__pyx_t_41, __pyx_n_s_loc, __pyx_n_s_int_2) < 0) __PYX_ERR(0, 4645, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_41, __pyx_n_s_channel, __pyx_n_s_int_2) < 0) __PYX_ERR(0, 4645, __pyx_L1_error)
  __pyx_t_40 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_513in_any, 0, __pyx_n_s_in_any, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__518)); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 4645, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_40, __pyx_t_41);
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_in_any, __pyx_t_40) < 0) __PYX_ERR(0, 4645, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
  __pyx_codeobj__518 = (PyObject*)__Pyx_PyCode_New(3, 0, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__517, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_in_any, 4645, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__518)) __PYX_ERR(0, 4645, __pyx_L1_error)
 4646:     """
 4647:     input stream sample at loc \in channel chan.
 4648:     
 4649:     :param loc: location to read from
 4650:     :param channel: channel to read from 
 4651:     :param inp: input to read from. can be an appropriately shaped np.ndarray or file2sample
 4652:     :return: data
 4653:     :rtype: float
 4654:     """
+4655:     if is_list_or_ndarray(input):
  __pyx_t_1 = __pyx_f_8pysndlib_3clm_is_list_or_ndarray(__pyx_builtin_input, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4655, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 4655, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_2) {
/* … */
  }
+4656:         return inp[channel][loc]
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_1 = __Pyx_PyObject_GetItem(__pyx_v_inp, __pyx_v_channel); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4656, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_3 = __Pyx_PyObject_GetItem(__pyx_t_1, __pyx_v_loc); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4656, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_r = __pyx_t_3;
    __pyx_t_3 = 0;
    goto __pyx_L0;
+4657:     elif isinstance(inp, types.GeneratorType):
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_types); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4657, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_GeneratorType); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4657, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_2 = PyObject_IsInstance(__pyx_v_inp, __pyx_t_1); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 4657, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_2) {
/* … */
  }
+4658:         return next(inp)
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_1 = __Pyx_PyIter_Next(__pyx_v_inp); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4658, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_r = __pyx_t_1;
    __pyx_t_1 = 0;
    goto __pyx_L0;
+4659:     elif callable(inp):
  __pyx_t_2 = __Pyx_PyCallable_Check(__pyx_v_inp); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 4659, __pyx_L1_error)
  if (__pyx_t_2) {
/* … */
  }
+4660:         return inp(loc, channel)
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_v_inp);
    __pyx_t_3 = __pyx_v_inp; __pyx_t_4 = NULL;
    __pyx_t_5 = 0;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
      __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3);
      if (likely(__pyx_t_4)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
        __Pyx_INCREF(__pyx_t_4);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_3, function);
        __pyx_t_5 = 1;
      }
    }
    {
      PyObject *__pyx_callargs[3] = {__pyx_t_4, __pyx_v_loc, __pyx_v_channel};
      __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_5, 2+__pyx_t_5);
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4660, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    }
    __pyx_r = __pyx_t_1;
    __pyx_t_1 = 0;
    goto __pyx_L0;
 4661:     else:
+4662:         ipt = <mus_any>inp
  /*else*/ {
    __pyx_t_1 = __pyx_v_inp;
    __Pyx_INCREF(__pyx_t_1);
    __pyx_v_ipt = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)__pyx_t_1);
    __pyx_t_1 = 0;
+4663:         return cclm.mus_in_any(loc, channel, ipt._ptr)
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_6 = __Pyx_PyInt_As_mus_long_t(__pyx_v_loc); if (unlikely((__pyx_t_6 == ((mus_long_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 4663, __pyx_L1_error)
    __pyx_t_5 = __Pyx_PyInt_As_int(__pyx_v_channel); if (unlikely((__pyx_t_5 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 4663, __pyx_L1_error)
    __pyx_t_1 = PyFloat_FromDouble(mus_in_any(__pyx_t_6, __pyx_t_5, __pyx_v_ipt->_ptr)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4663, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_r = __pyx_t_1;
    __pyx_t_1 = 0;
    goto __pyx_L0;
  }
 4664: 
 4665: #--------------- ina ----------------#
+4666: cpdef ina(loc: int, inp):
static PyObject *__pyx_pw_8pysndlib_3clm_515ina(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyObject *__pyx_f_8pysndlib_3clm_ina(PyObject *__pyx_v_loc, PyObject *__pyx_v_inp, CYTHON_UNUSED int __pyx_skip_dispatch) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("ina", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pysndlib.clm.ina", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_515ina(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_514ina, "\n    input stream sample at loc \\in channel 0.\n    \n    :param loc: location to read from\n    :param inp: input to read from. can be an appropriately shaped np.ndarray or file2sample\n    :return: data\n    :rtype: float\n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_515ina = {"ina", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_515ina, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_514ina};
static PyObject *__pyx_pw_8pysndlib_3clm_515ina(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_loc = 0;
  PyObject *__pyx_v_inp = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("ina (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_loc,&__pyx_n_s_inp,0};
    PyObject* values[2] = {0,0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_loc)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 4666, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_inp)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 4666, __pyx_L3_error)
        else {
          __Pyx_RaiseArgtupleInvalid("ina", 1, 2, 2, 1); __PYX_ERR(0, 4666, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "ina") < 0)) __PYX_ERR(0, 4666, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 2)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
      values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
    }
    __pyx_v_loc = ((PyObject*)values[0]);
    __pyx_v_inp = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("ina", 1, 2, 2, __pyx_nargs); __PYX_ERR(0, 4666, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.ina", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_loc), (&PyInt_Type), 0, "loc", 1))) __PYX_ERR(0, 4666, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pysndlib_3clm_514ina(__pyx_self, __pyx_v_loc, __pyx_v_inp);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_514ina(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_loc, PyObject *__pyx_v_inp) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("ina", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_8pysndlib_3clm_ina(__pyx_v_loc, __pyx_v_inp, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4666, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pysndlib.clm.ina", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__519 = PyTuple_Pack(2, __pyx_n_s_loc, __pyx_n_s_inp); if (unlikely(!__pyx_tuple__519)) __PYX_ERR(0, 4666, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__519);
  __Pyx_GIVEREF(__pyx_tuple__519);
/* … */
  __pyx_t_40 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 4666, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  if (PyDict_SetItem(__pyx_t_40, __pyx_n_s_loc, __pyx_n_s_int_2) < 0) __PYX_ERR(0, 4666, __pyx_L1_error)
  __pyx_t_41 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_515ina, 0, __pyx_n_s_ina, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__520)); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 4666, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_41, __pyx_t_40);
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_ina, __pyx_t_41) < 0) __PYX_ERR(0, 4666, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
  __pyx_codeobj__520 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__519, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_ina, 4666, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__520)) __PYX_ERR(0, 4666, __pyx_L1_error)
 4667:     """
 4668:     input stream sample at loc \in channel 0.
 4669:     
 4670:     :param loc: location to read from
 4671:     :param inp: input to read from. can be an appropriately shaped np.ndarray or file2sample
 4672:     :return: data
 4673:     :rtype: float
 4674:     """
+4675:     return in_any(loc, 0, inp)
  __Pyx_XDECREF(__pyx_r);
  if (!(likely(__Pyx_Py3Int_CheckExact(__pyx_int_0)) || __Pyx_RaiseUnexpectedTypeError("int", __pyx_int_0))) __PYX_ERR(0, 4675, __pyx_L1_error)
  __pyx_t_1 = __pyx_f_8pysndlib_3clm_in_any(__pyx_v_loc, ((PyObject*)__pyx_int_0), __pyx_v_inp, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4675, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 4676: 
 4677: #--------------- inb ----------------#    
+4678: cpdef inb(loc: int, inp):
static PyObject *__pyx_pw_8pysndlib_3clm_517inb(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyObject *__pyx_f_8pysndlib_3clm_inb(PyObject *__pyx_v_loc, PyObject *__pyx_v_inp, CYTHON_UNUSED int __pyx_skip_dispatch) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("inb", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pysndlib.clm.inb", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_517inb(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_516inb, "\n    input stream sample at loc \\in channel 1.\n    \n    :param loc: location to read from\n    :param channel: channel to read from \n    :param inp: input to read from. can be an appropriately shaped np.ndarray or file2sample\n    :return: data\n    :rtype: float\n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_517inb = {"inb", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_517inb, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_516inb};
static PyObject *__pyx_pw_8pysndlib_3clm_517inb(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_loc = 0;
  PyObject *__pyx_v_inp = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("inb (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_loc,&__pyx_n_s_inp,0};
    PyObject* values[2] = {0,0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_loc)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 4678, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_inp)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 4678, __pyx_L3_error)
        else {
          __Pyx_RaiseArgtupleInvalid("inb", 1, 2, 2, 1); __PYX_ERR(0, 4678, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "inb") < 0)) __PYX_ERR(0, 4678, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 2)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
      values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
    }
    __pyx_v_loc = ((PyObject*)values[0]);
    __pyx_v_inp = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("inb", 1, 2, 2, __pyx_nargs); __PYX_ERR(0, 4678, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.inb", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_loc), (&PyInt_Type), 0, "loc", 1))) __PYX_ERR(0, 4678, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pysndlib_3clm_516inb(__pyx_self, __pyx_v_loc, __pyx_v_inp);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_516inb(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_loc, PyObject *__pyx_v_inp) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("inb", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_8pysndlib_3clm_inb(__pyx_v_loc, __pyx_v_inp, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4678, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pysndlib.clm.inb", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_41 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 4678, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  if (PyDict_SetItem(__pyx_t_41, __pyx_n_s_loc, __pyx_n_s_int_2) < 0) __PYX_ERR(0, 4678, __pyx_L1_error)
  __pyx_t_40 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_517inb, 0, __pyx_n_s_inb, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__521)); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 4678, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_40, __pyx_t_41);
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_inb, __pyx_t_40) < 0) __PYX_ERR(0, 4678, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
/* … */
  __pyx_codeobj__521 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__519, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_inb, 4678, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__521)) __PYX_ERR(0, 4678, __pyx_L1_error)
 4679:     """
 4680:     input stream sample at loc \in channel 1.
 4681:     
 4682:     :param loc: location to read from
 4683:     :param channel: channel to read from 
 4684:     :param inp: input to read from. can be an appropriately shaped np.ndarray or file2sample
 4685:     :return: data
 4686:     :rtype: float
 4687:     """
+4688:     return in_any(loc, 1, inp)
  __Pyx_XDECREF(__pyx_r);
  if (!(likely(__Pyx_Py3Int_CheckExact(__pyx_int_1)) || __Pyx_RaiseUnexpectedTypeError("int", __pyx_int_1))) __PYX_ERR(0, 4688, __pyx_L1_error)
  __pyx_t_1 = __pyx_f_8pysndlib_3clm_in_any(__pyx_v_loc, ((PyObject*)__pyx_int_1), __pyx_v_inp, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4688, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 4689: 
 4690: 
 4691: 
 4692: # --------------- locsig ---------------- #
+4693: cpdef mus_any make_locsig(degree: Optional[float]=0.0,
static PyObject *__pyx_pw_8pysndlib_3clm_519make_locsig(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_f_8pysndlib_3clm_make_locsig(CYTHON_UNUSED int __pyx_skip_dispatch, struct __pyx_opt_args_8pysndlib_3clm_make_locsig *__pyx_optional_args) {
  PyObject *__pyx_v_degree = ((PyObject *)__pyx_float_0_0);
  PyObject *__pyx_v_distance = ((PyObject *)__pyx_float_1_);
  PyObject *__pyx_v_reverb = ((PyObject *)__pyx_float_0_0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("pysndlib.clm.make_locsig", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_out);
  __Pyx_XDECREF((PyObject *)__pyx_v_rout);
  __Pyx_XDECREF((PyObject *)__pyx_v_res);
  __Pyx_XDECREF(__pyx_v_output);
  __Pyx_XDECREF(__pyx_v_revout);
  __Pyx_XDECREF(__pyx_v_channels);
  __Pyx_XDECREF(__pyx_v_reverb_channels);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_519make_locsig(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_518make_locsig, "\n    return a new generator for signal placement \\in n channels.  channel 0 corresponds to 0 degrees.\n    \n    :param degree: degree to place sound\n    :param distance: distance, 1.0 or greater\n    :param reverb: reverb amount\n    :param output: output to write 'dry' signal to. can be an appropriately shaped np.ndarray or sample2file\n    :param revout: output to write 'wet' signal to. can be an appropriately shaped np.ndarray or sample2file\n    :param channels: number of main channels\n    :param reverb_channels: number of channels for reverb\n    :param interp_type: interpolation of position. can be Interp.LINEAR, Interp.SINUSOIDAL\n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_519make_locsig = {"make_locsig", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_519make_locsig, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_518make_locsig};
static PyObject *__pyx_pw_8pysndlib_3clm_519make_locsig(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_degree = 0;
  PyObject *__pyx_v_distance = 0;
  PyObject *__pyx_v_reverb = 0;
  PyObject *__pyx_v_output = 0;
  PyObject *__pyx_v_revout = 0;
  PyObject *__pyx_v_channels = 0;
  PyObject *__pyx_v_reverb_channels = 0;
  PyObject *__pyx_v_interp_type = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("make_locsig (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_degree,&__pyx_n_s_distance,&__pyx_n_s_reverb,&__pyx_n_s_output,&__pyx_n_s_revout,&__pyx_n_s_channels,&__pyx_n_s_reverb_channels,&__pyx_n_s_interp_type,0};
    PyObject* values[8] = {0,0,0,0,0,0,0,0};
    values[0] = ((PyObject *)__pyx_float_0_0);
    values[1] = ((PyObject *)__pyx_float_1_);
    values[2] = ((PyObject *)__pyx_float_0_0);
/* … */
  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_518make_locsig(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_degree, PyObject *__pyx_v_distance, PyObject *__pyx_v_reverb, PyObject *__pyx_v_output, PyObject *__pyx_v_revout, PyObject *__pyx_v_channels, PyObject *__pyx_v_reverb_channels, PyObject *__pyx_v_interp_type) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("make_locsig", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2.__pyx_n = 8;
  __pyx_t_2.degree = __pyx_v_degree;
  __pyx_t_2.distance = __pyx_v_distance;
  __pyx_t_2.reverb = __pyx_v_reverb;
  __pyx_t_2.output = __pyx_v_output;
  __pyx_t_2.revout = __pyx_v_revout;
  __pyx_t_2.channels = __pyx_v_channels;
  __pyx_t_2.reverb_channels = __pyx_v_reverb_channels;
  __pyx_t_2.interp_type = __pyx_v_interp_type;
  __pyx_t_1 = ((PyObject *)__pyx_f_8pysndlib_3clm_make_locsig(0, &__pyx_t_2)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4693, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pysndlib.clm.make_locsig", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__522 = PyTuple_Pack(8, __pyx_n_s_degree, __pyx_n_s_distance, __pyx_n_s_reverb, __pyx_n_s_output, __pyx_n_s_revout, __pyx_n_s_channels, __pyx_n_s_reverb_channels, __pyx_n_s_interp_type); if (unlikely(!__pyx_tuple__522)) __PYX_ERR(0, 4693, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__522);
  __Pyx_GIVEREF(__pyx_tuple__522);
/* … */
  __pyx_t_41 = PyTuple_New(8); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 4693, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  __Pyx_INCREF(__pyx_float_0_0);
  __Pyx_GIVEREF(__pyx_float_0_0);
  PyTuple_SET_ITEM(__pyx_t_41, 0, __pyx_float_0_0);
  __Pyx_INCREF(__pyx_float_1_);
  __Pyx_GIVEREF(__pyx_float_1_);
  PyTuple_SET_ITEM(__pyx_t_41, 1, __pyx_float_1_);
  __Pyx_INCREF(__pyx_float_0_0);
  __Pyx_GIVEREF(__pyx_float_0_0);
  PyTuple_SET_ITEM(__pyx_t_41, 2, __pyx_float_0_0);
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  PyTuple_SET_ITEM(__pyx_t_41, 3, Py_None);
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  PyTuple_SET_ITEM(__pyx_t_41, 4, Py_None);
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  PyTuple_SET_ITEM(__pyx_t_41, 5, Py_None);
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  PyTuple_SET_ITEM(__pyx_t_41, 6, Py_None);
  __Pyx_GIVEREF(__pyx_t_40);
  PyTuple_SET_ITEM(__pyx_t_41, 7, __pyx_t_40);
  __pyx_t_40 = 0;
  __pyx_t_40 = __Pyx_PyDict_NewPresized(8); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 4693, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  if (PyDict_SetItem(__pyx_t_40, __pyx_n_s_degree, __pyx_kp_s_Optional_float) < 0) __PYX_ERR(0, 4693, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_40, __pyx_n_s_distance, __pyx_kp_s_Optional_float) < 0) __PYX_ERR(0, 4693, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_40, __pyx_n_s_reverb, __pyx_kp_s_Optional_float) < 0) __PYX_ERR(0, 4693, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_40, __pyx_n_s_output, __pyx_kp_s_Optional_mus_any) < 0) __PYX_ERR(0, 4693, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_40, __pyx_n_s_revout, __pyx_kp_s_Optional_mus_any) < 0) __PYX_ERR(0, 4693, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_40, __pyx_n_s_channels, __pyx_kp_s_Optional_int) < 0) __PYX_ERR(0, 4693, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_40, __pyx_n_s_reverb_channels, __pyx_kp_s_Optional_int) < 0) __PYX_ERR(0, 4693, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_40, __pyx_n_s_interp_type, __pyx_kp_s_Optional_Interp) < 0) __PYX_ERR(0, 4693, __pyx_L1_error)
  __pyx_t_37 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_519make_locsig, 0, __pyx_n_s_make_locsig, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__523)); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 4693, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_37, __pyx_t_41);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_37, __pyx_t_40);
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_make_locsig, __pyx_t_37) < 0) __PYX_ERR(0, 4693, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
  __pyx_codeobj__523 = (PyObject*)__Pyx_PyCode_New(8, 0, 0, 8, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__522, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_make_locsig, 4693, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__523)) __PYX_ERR(0, 4693, __pyx_L1_error)
/* … */
struct __pyx_opt_args_8pysndlib_3clm_make_locsig {
  int __pyx_n;
  PyObject *degree;
  PyObject *distance;
  PyObject *reverb;
  PyObject *output;
  PyObject *revout;
  PyObject *channels;
  PyObject *reverb_channels;
  PyObject *interp_type;
};
 4694:     distance: Optional[float]=1.,
 4695:     reverb: Optional[float]=0.0,
+4696:     output: Optional[mus_any]=None,
  PyObject *__pyx_v_output = ((PyObject *)Py_None);
/* … */
    values[3] = ((PyObject *)Py_None);
+4697:     revout: Optional[mus_any]=None,
  PyObject *__pyx_v_revout = ((PyObject *)Py_None);
/* … */
    values[4] = ((PyObject *)Py_None);
+4698:     channels: Optional[int]=None,
  PyObject *__pyx_v_channels = ((PyObject *)Py_None);
/* … */
    values[5] = ((PyObject *)Py_None);
+4699:     reverb_channels: Optional[int]=None,
  PyObject *__pyx_v_reverb_channels = ((PyObject *)Py_None);
  PyObject *__pyx_v_interp_type = __pyx_k__53;
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_out = NULL;
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_rout = NULL;
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_res = NULL;
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("make_locsig", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_degree = __pyx_optional_args->degree;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_distance = __pyx_optional_args->distance;
        if (__pyx_optional_args->__pyx_n > 2) {
          __pyx_v_reverb = __pyx_optional_args->reverb;
          if (__pyx_optional_args->__pyx_n > 3) {
            __pyx_v_output = __pyx_optional_args->output;
            if (__pyx_optional_args->__pyx_n > 4) {
              __pyx_v_revout = __pyx_optional_args->revout;
              if (__pyx_optional_args->__pyx_n > 5) {
                __pyx_v_channels = __pyx_optional_args->channels;
                if (__pyx_optional_args->__pyx_n > 6) {
                  __pyx_v_reverb_channels = __pyx_optional_args->reverb_channels;
                  if (__pyx_optional_args->__pyx_n > 7) {
                    __pyx_v_interp_type = __pyx_optional_args->interp_type;
                  }
                }
              }
            }
          }
        }
      }
    }
  }
  __Pyx_INCREF(__pyx_v_output);
  __Pyx_INCREF(__pyx_v_revout);
  __Pyx_INCREF(__pyx_v_channels);
  __Pyx_INCREF(__pyx_v_reverb_channels);
/* … */
    values[6] = ((PyObject *)Py_None);
    values[7] = __pyx_k__53;
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  8: values[7] = __Pyx_Arg_FASTCALL(__pyx_args, 7);
        CYTHON_FALLTHROUGH;
        case  7: values[6] = __Pyx_Arg_FASTCALL(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = __Pyx_Arg_FASTCALL(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = __Pyx_Arg_FASTCALL(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_degree);
          if (value) { values[0] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 4693, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_distance);
          if (value) { values[1] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 4693, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_reverb);
          if (value) { values[2] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 4693, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_output);
          if (value) { values[3] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 4693, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_revout);
          if (value) { values[4] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 4693, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  5:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_channels);
          if (value) { values[5] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 4693, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  6:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_reverb_channels);
          if (value) { values[6] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 4693, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  7:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_interp_type);
          if (value) { values[7] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 4693, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "make_locsig") < 0)) __PYX_ERR(0, 4693, __pyx_L3_error)
      }
    } else {
      switch (__pyx_nargs) {
        case  8: values[7] = __Pyx_Arg_FASTCALL(__pyx_args, 7);
        CYTHON_FALLTHROUGH;
        case  7: values[6] = __Pyx_Arg_FASTCALL(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = __Pyx_Arg_FASTCALL(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = __Pyx_Arg_FASTCALL(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_degree = values[0];
    __pyx_v_distance = values[1];
    __pyx_v_reverb = values[2];
    __pyx_v_output = values[3];
    __pyx_v_revout = values[4];
    __pyx_v_channels = values[5];
    __pyx_v_reverb_channels = values[6];
    __pyx_v_interp_type = values[7];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("make_locsig", 0, 0, 8, __pyx_nargs); __PYX_ERR(0, 4693, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.make_locsig", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pysndlib_3clm_518make_locsig(__pyx_self, __pyx_v_degree, __pyx_v_distance, __pyx_v_reverb, __pyx_v_output, __pyx_v_revout, __pyx_v_channels, __pyx_v_reverb_channels, __pyx_v_interp_type);
+4700:     interp_type: Optional[Interp]=Interp.LINEAR):
  __pyx_t_40 = __Pyx_Enum_Interp_to_py(__pyx_e_8pysndlib_3clm_LINEAR); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 4700, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  __pyx_k__53 = __pyx_t_40;
  __Pyx_GIVEREF(__pyx_t_40);
  __pyx_t_40 = 0;
/* … */
  __pyx_t_40 = __Pyx_Enum_Interp_to_py(__pyx_e_8pysndlib_3clm_LINEAR); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 4700, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
 4701:     
 4702:     """
 4703:     return a new generator for signal placement \in n channels.  channel 0 corresponds to 0 degrees.
 4704:     
 4705:     :param degree: degree to place sound
 4706:     :param distance: distance, 1.0 or greater
 4707:     :param reverb: reverb amount
 4708:     :param output: output to write 'dry' signal to. can be an appropriately shaped np.ndarray or sample2file
 4709:     :param revout: output to write 'wet' signal to. can be an appropriately shaped np.ndarray or sample2file
 4710:     :param channels: number of main channels
 4711:     :param reverb_channels: number of channels for reverb
 4712:     :param interp_type: interpolation of position. can be Interp.LINEAR, Interp.SINUSOIDAL
 4713:     """
 4714: 
 4715:     cdef cclm.detour_cb cy_detour_f_ptr
 4716: 
+4717:     if not output:
  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_output); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 4717, __pyx_L1_error)
  __pyx_t_2 = (!__pyx_t_1);
  if (__pyx_t_2) {
/* … */
  }
+4718:         output = CLM.output  #todo : check if this exists
    __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_CLM); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4718, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_output); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4718, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF_SET(__pyx_v_output, __pyx_t_4);
    __pyx_t_4 = 0;
 4719: 
+4720:     if not revout:
  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_revout); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 4720, __pyx_L1_error)
  __pyx_t_1 = (!__pyx_t_2);
  if (__pyx_t_1) {
/* … */
  }
+4721:         if CLM.reverb is not None:
    __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_CLM); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4721, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_reverb); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4721, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_1 = (__pyx_t_3 != Py_None);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (__pyx_t_1) {
/* … */
      goto __pyx_L5;
    }
+4722:             revout = CLM.reverb
      __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_CLM); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4722, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_reverb); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4722, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_DECREF_SET(__pyx_v_revout, __pyx_t_4);
      __pyx_t_4 = 0;
 4723:         else:
+4724:             revout = None #this generates and error but still works
    /*else*/ {
      __Pyx_INCREF(Py_None);
      __Pyx_DECREF_SET(__pyx_v_revout, Py_None);
    }
    __pyx_L5:;
 4725: 
+4726:     if not channels:
  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_channels); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 4726, __pyx_L1_error)
  __pyx_t_2 = (!__pyx_t_1);
  if (__pyx_t_2) {
/* … */
  }
+4727:         channels = clm_channels(output)
    __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_clm_channels); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4727, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_5 = NULL;
    __pyx_t_6 = 0;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
      __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_3);
      if (likely(__pyx_t_5)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
        __Pyx_INCREF(__pyx_t_5);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_3, function);
        __pyx_t_6 = 1;
      }
    }
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_v_output};
      __pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_6, 1+__pyx_t_6);
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4727, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    }
    __Pyx_DECREF_SET(__pyx_v_channels, __pyx_t_4);
    __pyx_t_4 = 0;
 4728: 
+4729:     if not reverb_channels:
  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_reverb_channels); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 4729, __pyx_L1_error)
  __pyx_t_1 = (!__pyx_t_2);
  if (__pyx_t_1) {
/* … */
  }
+4730:         reverb_channels = clm_channels(revout)
    __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_clm_channels); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4730, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_5 = NULL;
    __pyx_t_6 = 0;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
      __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_3);
      if (likely(__pyx_t_5)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
        __Pyx_INCREF(__pyx_t_5);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_3, function);
        __pyx_t_6 = 1;
      }
    }
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_v_revout};
      __pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_6, 1+__pyx_t_6);
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4730, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    }
    __Pyx_DECREF_SET(__pyx_v_reverb_channels, __pyx_t_4);
    __pyx_t_4 = 0;
 4731:     #<void*>(<mus_any>inp)._ptr
+4732:     if isinstance(output, mus_any):
  __pyx_t_1 = __Pyx_TypeCheck(__pyx_v_output, __pyx_ptype_8pysndlib_3clm_mus_any); 
  if (__pyx_t_1) {
/* … */
  }
 4733: 
+4734:         out = <mus_any>output
    __pyx_t_4 = __pyx_v_output;
    __Pyx_INCREF(__pyx_t_4);
    __pyx_v_out = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)__pyx_t_4);
    __pyx_t_4 = 0;
+4735:         rout = <mus_any>revout
    __pyx_t_4 = __pyx_v_revout;
    __Pyx_INCREF(__pyx_t_4);
    __pyx_v_rout = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)__pyx_t_4);
    __pyx_t_4 = 0;
+4736:         res = mus_any.from_ptr(cclm.mus_make_locsig(degree, distance, reverb, channels, out._ptr, reverb_channels, rout._ptr,  interp_type))
    __pyx_t_7 = __pyx_PyFloat_AsDouble(__pyx_v_degree); if (unlikely((__pyx_t_7 == ((mus_float_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 4736, __pyx_L1_error)
    __pyx_t_8 = __pyx_PyFloat_AsDouble(__pyx_v_distance); if (unlikely((__pyx_t_8 == ((mus_float_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 4736, __pyx_L1_error)
    __pyx_t_9 = __pyx_PyFloat_AsDouble(__pyx_v_reverb); if (unlikely((__pyx_t_9 == ((mus_float_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 4736, __pyx_L1_error)
    __pyx_t_6 = __Pyx_PyInt_As_int(__pyx_v_channels); if (unlikely((__pyx_t_6 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 4736, __pyx_L1_error)
    __pyx_t_10 = __Pyx_PyInt_As_int(__pyx_v_reverb_channels); if (unlikely((__pyx_t_10 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 4736, __pyx_L1_error)
    __pyx_t_11 = ((mus_interp_t)__Pyx_PyInt_As_mus_interp_t(__pyx_v_interp_type)); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 4736, __pyx_L1_error)
    __pyx_t_4 = ((PyObject *)__pyx_vtabptr_8pysndlib_3clm_mus_any->from_ptr(mus_make_locsig(__pyx_t_7, __pyx_t_8, __pyx_t_9, __pyx_t_6, __pyx_v_out->_ptr, __pyx_t_10, __pyx_v_rout->_ptr, __pyx_t_11), NULL)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4736, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_v_res = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)__pyx_t_4);
    __pyx_t_4 = 0;
+4737:         return res
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __Pyx_INCREF((PyObject *)__pyx_v_res);
    __pyx_r = __pyx_v_res;
    goto __pyx_L0;
 4738: 
 4739:     # todo: what if revout is not an iterable? while possible not going to deal with it right now :)   
+4740:     elif is_list_or_ndarray(output):
  __pyx_t_4 = __pyx_f_8pysndlib_3clm_is_list_or_ndarray(__pyx_v_output, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4740, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 4740, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (likely(__pyx_t_1)) {
/* … */
  }
+4741:         if not reverb_channels:
    __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_reverb_channels); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 4741, __pyx_L1_error)
    __pyx_t_2 = (!__pyx_t_1);
    if (__pyx_t_2) {
/* … */
    }
+4742:             reverb_channels = 0
      __Pyx_INCREF(__pyx_int_0);
      __Pyx_DECREF_SET(__pyx_v_reverb_channels, __pyx_int_0);
 4743: 
+4744:         res = mus_any.from_ptr(cclm.mus_make_locsig(degree, distance, reverb, channels, NULL, reverb_channels, NULL, interp_type))
    __pyx_t_9 = __pyx_PyFloat_AsDouble(__pyx_v_degree); if (unlikely((__pyx_t_9 == ((mus_float_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 4744, __pyx_L1_error)
    __pyx_t_8 = __pyx_PyFloat_AsDouble(__pyx_v_distance); if (unlikely((__pyx_t_8 == ((mus_float_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 4744, __pyx_L1_error)
    __pyx_t_7 = __pyx_PyFloat_AsDouble(__pyx_v_reverb); if (unlikely((__pyx_t_7 == ((mus_float_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 4744, __pyx_L1_error)
    __pyx_t_10 = __Pyx_PyInt_As_int(__pyx_v_channels); if (unlikely((__pyx_t_10 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 4744, __pyx_L1_error)
    __pyx_t_6 = __Pyx_PyInt_As_int(__pyx_v_reverb_channels); if (unlikely((__pyx_t_6 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 4744, __pyx_L1_error)
    __pyx_t_11 = ((mus_interp_t)__Pyx_PyInt_As_mus_interp_t(__pyx_v_interp_type)); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 4744, __pyx_L1_error)
    __pyx_t_4 = ((PyObject *)__pyx_vtabptr_8pysndlib_3clm_mus_any->from_ptr(mus_make_locsig(__pyx_t_9, __pyx_t_8, __pyx_t_7, __pyx_t_10, NULL, __pyx_t_6, NULL, __pyx_t_11), NULL)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4744, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_v_res = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)__pyx_t_4);
    __pyx_t_4 = 0;
+4745:         cclm.mus_locsig_set_detour(res._ptr, <cclm.detour_cb>locsig_detour_callback_func)
    mus_locsig_set_detour(__pyx_v_res->_ptr, ((detour_cb)__pyx_f_8pysndlib_3clm_locsig_detour_callback_func));
 4746: 
+4747:         return res
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __Pyx_INCREF((PyObject *)__pyx_v_res);
    __pyx_r = __pyx_v_res;
    goto __pyx_L0;
 4748: 
 4749:     else:
+4750:         raise TypeError(f"output needs to be a clm gen or np.array not a {type(output)}")
  /*else*/ {
    __pyx_t_4 = __Pyx_PyObject_FormatSimple(((PyObject *)Py_TYPE(__pyx_v_output)), __pyx_empty_unicode); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4750, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_3 = __Pyx_PyUnicode_Concat(__pyx_kp_u_output_needs_to_be_a_clm_gen_or, __pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4750, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_4 = __Pyx_PyObject_CallOneArg(__pyx_builtin_TypeError, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4750, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_Raise(__pyx_t_4, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __PYX_ERR(0, 4750, __pyx_L1_error)
  }
 4751: 
+4752: cpdef cython.double locsig(gen: mus_any, loc: int, val: cython.double):
static PyObject *__pyx_pw_8pysndlib_3clm_521locsig(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static double __pyx_f_8pysndlib_3clm_locsig(struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen, PyObject *__pyx_v_loc, double __pyx_v_val, CYTHON_UNUSED int __pyx_skip_dispatch) {
  double __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("locsig", 0);
/* … */
  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("pysndlib.clm.locsig", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_521locsig(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_520locsig, "\n    locsig 'gen' channel 'chan' scaler.\n    \n    :param gen: locsig gen\n    :param loc: location to write to \\in samples\n    :param val: sample value\n    :return: data\n    :rtype: float\n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_521locsig = {"locsig", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_521locsig, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_520locsig};
static PyObject *__pyx_pw_8pysndlib_3clm_521locsig(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen = 0;
  PyObject *__pyx_v_loc = 0;
  double __pyx_v_val;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("locsig (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_gen,&__pyx_n_s_loc,&__pyx_n_s_val,0};
    PyObject* values[3] = {0,0,0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_gen)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 4752, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_loc)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 4752, __pyx_L3_error)
        else {
          __Pyx_RaiseArgtupleInvalid("locsig", 1, 3, 3, 1); __PYX_ERR(0, 4752, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_val)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 4752, __pyx_L3_error)
        else {
          __Pyx_RaiseArgtupleInvalid("locsig", 1, 3, 3, 2); __PYX_ERR(0, 4752, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "locsig") < 0)) __PYX_ERR(0, 4752, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 3)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
      values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
      values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
    }
    __pyx_v_gen = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)values[0]);
    __pyx_v_loc = ((PyObject*)values[1]);
    __pyx_v_val = __pyx_PyFloat_AsDouble(values[2]); if (unlikely((__pyx_v_val == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 4752, __pyx_L3_error)
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("locsig", 1, 3, 3, __pyx_nargs); __PYX_ERR(0, 4752, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.locsig", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_gen), __pyx_ptype_8pysndlib_3clm_mus_any, 0, "gen", 0))) __PYX_ERR(0, 4752, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_loc), (&PyInt_Type), 0, "loc", 1))) __PYX_ERR(0, 4752, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pysndlib_3clm_520locsig(__pyx_self, __pyx_v_gen, __pyx_v_loc, __pyx_v_val);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_520locsig(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen, PyObject *__pyx_v_loc, double __pyx_v_val) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("locsig", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_8pysndlib_3clm_locsig(__pyx_v_gen, __pyx_v_loc, __pyx_v_val, 0); if (unlikely(__pyx_t_1 == ((double)-1) && PyErr_Occurred())) __PYX_ERR(0, 4752, __pyx_L1_error)
  __pyx_t_2 = PyFloat_FromDouble(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4752, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pysndlib.clm.locsig", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__524 = PyTuple_Pack(3, __pyx_n_s_gen, __pyx_n_s_loc, __pyx_n_s_val); if (unlikely(!__pyx_tuple__524)) __PYX_ERR(0, 4752, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__524);
  __Pyx_GIVEREF(__pyx_tuple__524);
/* … */
  __pyx_t_37 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 4752, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  if (PyDict_SetItem(__pyx_t_37, __pyx_n_s_gen, __pyx_n_s_mus_any) < 0) __PYX_ERR(0, 4752, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_37, __pyx_n_s_loc, __pyx_n_s_int_2) < 0) __PYX_ERR(0, 4752, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_37, __pyx_n_s_val, __pyx_kp_s_cython_double) < 0) __PYX_ERR(0, 4752, __pyx_L1_error)
  __pyx_t_40 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_521locsig, 0, __pyx_n_s_locsig, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__525)); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 4752, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_40, __pyx_t_37);
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_locsig, __pyx_t_40) < 0) __PYX_ERR(0, 4752, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
  __pyx_codeobj__525 = (PyObject*)__Pyx_PyCode_New(3, 0, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__524, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_locsig, 4752, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__525)) __PYX_ERR(0, 4752, __pyx_L1_error)
 4753:     """
 4754:     locsig 'gen' channel 'chan' scaler.
 4755:     
 4756:     :param gen: locsig gen
 4757:     :param loc: location to write to \in samples
 4758:     :param val: sample value
 4759:     :return: data
 4760:     :rtype: float
 4761:     """
+4762:     cclm.mus_locsig(gen._ptr, loc, val)
  __pyx_t_1 = __Pyx_PyInt_As_mus_long_t(__pyx_v_loc); if (unlikely((__pyx_t_1 == ((mus_long_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 4762, __pyx_L1_error)
  mus_locsig(__pyx_v_gen->_ptr, __pyx_t_1, __pyx_v_val);
 4763: 
+4764: cpdef bint is_locsig(gen: mus_any):
static PyObject *__pyx_pw_8pysndlib_3clm_523is_locsig(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static int __pyx_f_8pysndlib_3clm_is_locsig(struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen, CYTHON_UNUSED int __pyx_skip_dispatch) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_locsig", 0);
/* … */
  /* function exit code */
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_523is_locsig(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_522is_locsig, "\n    returns True if gen is a locsig.\n    \n    :param gen: gen\n    :return: result\n    :rtype: bool\n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_523is_locsig = {"is_locsig", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_523is_locsig, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_522is_locsig};
static PyObject *__pyx_pw_8pysndlib_3clm_523is_locsig(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_locsig (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_gen,0};
    PyObject* values[1] = {0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_gen)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 4764, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "is_locsig") < 0)) __PYX_ERR(0, 4764, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
    }
    __pyx_v_gen = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)values[0]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("is_locsig", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 4764, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.is_locsig", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_gen), __pyx_ptype_8pysndlib_3clm_mus_any, 0, "gen", 0))) __PYX_ERR(0, 4764, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pysndlib_3clm_522is_locsig(__pyx_self, __pyx_v_gen);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_522is_locsig(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_locsig", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_8pysndlib_3clm_is_locsig(__pyx_v_gen, 0); if (unlikely(__pyx_t_1 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 4764, __pyx_L1_error)
  __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4764, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pysndlib.clm.is_locsig", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_40 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 4764, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  if (PyDict_SetItem(__pyx_t_40, __pyx_n_s_gen, __pyx_n_s_mus_any) < 0) __PYX_ERR(0, 4764, __pyx_L1_error)
  __pyx_t_37 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_523is_locsig, 0, __pyx_n_s_is_locsig, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__526)); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 4764, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_37, __pyx_t_40);
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_is_locsig, __pyx_t_37) < 0) __PYX_ERR(0, 4764, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
/* … */
  __pyx_codeobj__526 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__46, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_is_locsig, 4764, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__526)) __PYX_ERR(0, 4764, __pyx_L1_error)
 4765:     """
 4766:     returns True if gen is a locsig.
 4767:     
 4768:     :param gen: gen
 4769:     :return: result
 4770:     :rtype: bool
 4771:     """
+4772:     return cclm.mus_is_locsig(gen._ptr)
  __pyx_r = mus_is_locsig(__pyx_v_gen->_ptr);
  goto __pyx_L0;
 4773: 
+4774: cpdef cython.double locsig_ref(gen: mus_any, chan: int):
static PyObject *__pyx_pw_8pysndlib_3clm_525locsig_ref(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static double __pyx_f_8pysndlib_3clm_locsig_ref(struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen, PyObject *__pyx_v_chan, CYTHON_UNUSED int __pyx_skip_dispatch) {
  double __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("locsig_ref", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("pysndlib.clm.locsig_ref", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_525locsig_ref(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_524locsig_ref, "\n    get locsig 'gen' channel 'chan' scaler for main output.\n    \n    :param gen: locsig gen\n    :param chan: channel to get\n    :return: scaler of chan\n    :rtype: float\n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_525locsig_ref = {"locsig_ref", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_525locsig_ref, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_524locsig_ref};
static PyObject *__pyx_pw_8pysndlib_3clm_525locsig_ref(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen = 0;
  PyObject *__pyx_v_chan = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("locsig_ref (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_gen,&__pyx_n_s_chan,0};
    PyObject* values[2] = {0,0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_gen)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 4774, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_chan)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 4774, __pyx_L3_error)
        else {
          __Pyx_RaiseArgtupleInvalid("locsig_ref", 1, 2, 2, 1); __PYX_ERR(0, 4774, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "locsig_ref") < 0)) __PYX_ERR(0, 4774, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 2)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
      values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
    }
    __pyx_v_gen = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)values[0]);
    __pyx_v_chan = ((PyObject*)values[1]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("locsig_ref", 1, 2, 2, __pyx_nargs); __PYX_ERR(0, 4774, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.locsig_ref", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_gen), __pyx_ptype_8pysndlib_3clm_mus_any, 0, "gen", 0))) __PYX_ERR(0, 4774, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_chan), (&PyInt_Type), 0, "chan", 1))) __PYX_ERR(0, 4774, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pysndlib_3clm_524locsig_ref(__pyx_self, __pyx_v_gen, __pyx_v_chan);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_524locsig_ref(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen, PyObject *__pyx_v_chan) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("locsig_ref", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_8pysndlib_3clm_locsig_ref(__pyx_v_gen, __pyx_v_chan, 0); if (unlikely(__pyx_t_1 == ((double)-1) && PyErr_Occurred())) __PYX_ERR(0, 4774, __pyx_L1_error)
  __pyx_t_2 = PyFloat_FromDouble(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4774, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pysndlib.clm.locsig_ref", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__527 = PyTuple_Pack(2, __pyx_n_s_gen, __pyx_n_s_chan); if (unlikely(!__pyx_tuple__527)) __PYX_ERR(0, 4774, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__527);
  __Pyx_GIVEREF(__pyx_tuple__527);
/* … */
  __pyx_t_37 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 4774, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  if (PyDict_SetItem(__pyx_t_37, __pyx_n_s_gen, __pyx_n_s_mus_any) < 0) __PYX_ERR(0, 4774, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_37, __pyx_n_s_chan, __pyx_n_s_int_2) < 0) __PYX_ERR(0, 4774, __pyx_L1_error)
  __pyx_t_40 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_525locsig_ref, 0, __pyx_n_s_locsig_ref, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__528)); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 4774, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_40, __pyx_t_37);
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_locsig_ref, __pyx_t_40) < 0) __PYX_ERR(0, 4774, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
  __pyx_codeobj__528 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__527, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_locsig_ref, 4774, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__528)) __PYX_ERR(0, 4774, __pyx_L1_error)
 4775:     """
 4776:     get locsig 'gen' channel 'chan' scaler for main output.
 4777:     
 4778:     :param gen: locsig gen
 4779:     :param chan: channel to get
 4780:     :return: scaler of chan
 4781:     :rtype: float
 4782:     """
+4783:     return cclm.mus_locsig_ref(gen._ptr, chan)
  __pyx_t_1 = __Pyx_PyInt_As_int(__pyx_v_chan); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 4783, __pyx_L1_error)
  __pyx_r = mus_locsig_ref(__pyx_v_gen->_ptr, __pyx_t_1);
  goto __pyx_L0;
 4784: 
+4785: cpdef cython.double locsig_set(gen: mus_any, chan: int, val: cython.double):
static PyObject *__pyx_pw_8pysndlib_3clm_527locsig_set(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static double __pyx_f_8pysndlib_3clm_locsig_set(struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen, PyObject *__pyx_v_chan, double __pyx_v_val, CYTHON_UNUSED int __pyx_skip_dispatch) {
  double __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("locsig_set", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("pysndlib.clm.locsig_set", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_527locsig_set(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_526locsig_set, "\n    set the locsig generator's channel 'chan' scaler to 'val'  for main output.\n    \n    :param gen: locsig gen\n    :param chan: channel to set\n    :param val: value to set to\n    :return: scaler of chan\n    :rtype: float\n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_527locsig_set = {"locsig_set", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_527locsig_set, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_526locsig_set};
static PyObject *__pyx_pw_8pysndlib_3clm_527locsig_set(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen = 0;
  PyObject *__pyx_v_chan = 0;
  double __pyx_v_val;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("locsig_set (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_gen,&__pyx_n_s_chan,&__pyx_n_s_val,0};
    PyObject* values[3] = {0,0,0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_gen)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 4785, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_chan)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 4785, __pyx_L3_error)
        else {
          __Pyx_RaiseArgtupleInvalid("locsig_set", 1, 3, 3, 1); __PYX_ERR(0, 4785, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_val)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 4785, __pyx_L3_error)
        else {
          __Pyx_RaiseArgtupleInvalid("locsig_set", 1, 3, 3, 2); __PYX_ERR(0, 4785, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "locsig_set") < 0)) __PYX_ERR(0, 4785, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 3)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
      values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
      values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
    }
    __pyx_v_gen = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)values[0]);
    __pyx_v_chan = ((PyObject*)values[1]);
    __pyx_v_val = __pyx_PyFloat_AsDouble(values[2]); if (unlikely((__pyx_v_val == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 4785, __pyx_L3_error)
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("locsig_set", 1, 3, 3, __pyx_nargs); __PYX_ERR(0, 4785, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.locsig_set", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_gen), __pyx_ptype_8pysndlib_3clm_mus_any, 0, "gen", 0))) __PYX_ERR(0, 4785, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_chan), (&PyInt_Type), 0, "chan", 1))) __PYX_ERR(0, 4785, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pysndlib_3clm_526locsig_set(__pyx_self, __pyx_v_gen, __pyx_v_chan, __pyx_v_val);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_526locsig_set(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen, PyObject *__pyx_v_chan, double __pyx_v_val) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("locsig_set", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_8pysndlib_3clm_locsig_set(__pyx_v_gen, __pyx_v_chan, __pyx_v_val, 0); if (unlikely(__pyx_t_1 == ((double)-1) && PyErr_Occurred())) __PYX_ERR(0, 4785, __pyx_L1_error)
  __pyx_t_2 = PyFloat_FromDouble(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4785, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pysndlib.clm.locsig_set", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__529 = PyTuple_Pack(3, __pyx_n_s_gen, __pyx_n_s_chan, __pyx_n_s_val); if (unlikely(!__pyx_tuple__529)) __PYX_ERR(0, 4785, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__529);
  __Pyx_GIVEREF(__pyx_tuple__529);
/* … */
  __pyx_t_40 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 4785, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  if (PyDict_SetItem(__pyx_t_40, __pyx_n_s_gen, __pyx_n_s_mus_any) < 0) __PYX_ERR(0, 4785, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_40, __pyx_n_s_chan, __pyx_n_s_int_2) < 0) __PYX_ERR(0, 4785, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_40, __pyx_n_s_val, __pyx_kp_s_cython_double) < 0) __PYX_ERR(0, 4785, __pyx_L1_error)
  __pyx_t_37 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_527locsig_set, 0, __pyx_n_s_locsig_set, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__530)); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 4785, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_37, __pyx_t_40);
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_locsig_set, __pyx_t_37) < 0) __PYX_ERR(0, 4785, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
  __pyx_codeobj__530 = (PyObject*)__Pyx_PyCode_New(3, 0, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__529, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_locsig_set, 4785, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__530)) __PYX_ERR(0, 4785, __pyx_L1_error)
 4786:     """
 4787:     set the locsig generator's channel 'chan' scaler to 'val'  for main output.
 4788:     
 4789:     :param gen: locsig gen
 4790:     :param chan: channel to set
 4791:     :param val: value to set to
 4792:     :return: scaler of chan
 4793:     :rtype: float
 4794:     """
+4795:     return cclm.mus_locsig_set(gen._ptr, chan, val)
  __pyx_t_1 = __Pyx_PyInt_As_int(__pyx_v_chan); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 4795, __pyx_L1_error)
  __pyx_r = mus_locsig_set(__pyx_v_gen->_ptr, __pyx_t_1, __pyx_v_val);
  goto __pyx_L0;
 4796: 
+4797: cpdef cython.double locsig_reverb_ref(gen: mus_any, chan: int):
static PyObject *__pyx_pw_8pysndlib_3clm_529locsig_reverb_ref(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static double __pyx_f_8pysndlib_3clm_locsig_reverb_ref(struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen, PyObject *__pyx_v_chan, CYTHON_UNUSED int __pyx_skip_dispatch) {
  double __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("locsig_reverb_ref", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("pysndlib.clm.locsig_reverb_ref", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_529locsig_reverb_ref(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_528locsig_reverb_ref, "\n    get locsig reverb channel 'chan' scaler.\n    \n    :param gen: locsig gen\n    :param chan: channel to get\n    :return: scaler of chan\n    :rtype: float\n    \n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_529locsig_reverb_ref = {"locsig_reverb_ref", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_529locsig_reverb_ref, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_528locsig_reverb_ref};
static PyObject *__pyx_pw_8pysndlib_3clm_529locsig_reverb_ref(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen = 0;
  PyObject *__pyx_v_chan = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("locsig_reverb_ref (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_gen,&__pyx_n_s_chan,0};
    PyObject* values[2] = {0,0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_gen)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 4797, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_chan)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 4797, __pyx_L3_error)
        else {
          __Pyx_RaiseArgtupleInvalid("locsig_reverb_ref", 1, 2, 2, 1); __PYX_ERR(0, 4797, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "locsig_reverb_ref") < 0)) __PYX_ERR(0, 4797, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 2)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
      values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
    }
    __pyx_v_gen = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)values[0]);
    __pyx_v_chan = ((PyObject*)values[1]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("locsig_reverb_ref", 1, 2, 2, __pyx_nargs); __PYX_ERR(0, 4797, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.locsig_reverb_ref", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_gen), __pyx_ptype_8pysndlib_3clm_mus_any, 0, "gen", 0))) __PYX_ERR(0, 4797, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_chan), (&PyInt_Type), 0, "chan", 1))) __PYX_ERR(0, 4797, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pysndlib_3clm_528locsig_reverb_ref(__pyx_self, __pyx_v_gen, __pyx_v_chan);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_528locsig_reverb_ref(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen, PyObject *__pyx_v_chan) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("locsig_reverb_ref", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_8pysndlib_3clm_locsig_reverb_ref(__pyx_v_gen, __pyx_v_chan, 0); if (unlikely(__pyx_t_1 == ((double)-1) && PyErr_Occurred())) __PYX_ERR(0, 4797, __pyx_L1_error)
  __pyx_t_2 = PyFloat_FromDouble(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4797, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pysndlib.clm.locsig_reverb_ref", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_37 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 4797, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  if (PyDict_SetItem(__pyx_t_37, __pyx_n_s_gen, __pyx_n_s_mus_any) < 0) __PYX_ERR(0, 4797, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_37, __pyx_n_s_chan, __pyx_n_s_int_2) < 0) __PYX_ERR(0, 4797, __pyx_L1_error)
  __pyx_t_40 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_529locsig_reverb_ref, 0, __pyx_n_s_locsig_reverb_ref, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__531)); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 4797, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_40, __pyx_t_37);
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_locsig_reverb_ref, __pyx_t_40) < 0) __PYX_ERR(0, 4797, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
/* … */
  __pyx_codeobj__531 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__527, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_locsig_reverb_ref, 4797, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__531)) __PYX_ERR(0, 4797, __pyx_L1_error)
 4798:     """
 4799:     get locsig reverb channel 'chan' scaler.
 4800:     
 4801:     :param gen: locsig gen
 4802:     :param chan: channel to get
 4803:     :return: scaler of chan
 4804:     :rtype: float
 4805:     
 4806:     """
+4807:     return cclm.mus_locsig_reverb_ref(gen._ptr, chan)
  __pyx_t_1 = __Pyx_PyInt_As_int(__pyx_v_chan); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 4807, __pyx_L1_error)
  __pyx_r = mus_locsig_reverb_ref(__pyx_v_gen->_ptr, __pyx_t_1);
  goto __pyx_L0;
 4808: 
+4809: cpdef cython.double locsig_reverb_set(gen: mus_any, chan: int, val: cython.double):
static PyObject *__pyx_pw_8pysndlib_3clm_531locsig_reverb_set(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static double __pyx_f_8pysndlib_3clm_locsig_reverb_set(struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen, PyObject *__pyx_v_chan, double __pyx_v_val, CYTHON_UNUSED int __pyx_skip_dispatch) {
  double __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("locsig_reverb_set", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("pysndlib.clm.locsig_reverb_set", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_531locsig_reverb_set(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_530locsig_reverb_set, "\n    set the locsig reverb channel 'chan' scaler to 'val'.\n    \n    :param gen: locsig gen\n    :param chan: channel to set\n    :param val: value to set to\n    :return: scaler of chan\n    :rtype: float\n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_531locsig_reverb_set = {"locsig_reverb_set", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_531locsig_reverb_set, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_530locsig_reverb_set};
static PyObject *__pyx_pw_8pysndlib_3clm_531locsig_reverb_set(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen = 0;
  PyObject *__pyx_v_chan = 0;
  double __pyx_v_val;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("locsig_reverb_set (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_gen,&__pyx_n_s_chan,&__pyx_n_s_val,0};
    PyObject* values[3] = {0,0,0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_gen)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 4809, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_chan)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 4809, __pyx_L3_error)
        else {
          __Pyx_RaiseArgtupleInvalid("locsig_reverb_set", 1, 3, 3, 1); __PYX_ERR(0, 4809, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_val)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 4809, __pyx_L3_error)
        else {
          __Pyx_RaiseArgtupleInvalid("locsig_reverb_set", 1, 3, 3, 2); __PYX_ERR(0, 4809, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "locsig_reverb_set") < 0)) __PYX_ERR(0, 4809, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 3)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
      values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
      values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
    }
    __pyx_v_gen = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)values[0]);
    __pyx_v_chan = ((PyObject*)values[1]);
    __pyx_v_val = __pyx_PyFloat_AsDouble(values[2]); if (unlikely((__pyx_v_val == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 4809, __pyx_L3_error)
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("locsig_reverb_set", 1, 3, 3, __pyx_nargs); __PYX_ERR(0, 4809, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.locsig_reverb_set", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_gen), __pyx_ptype_8pysndlib_3clm_mus_any, 0, "gen", 0))) __PYX_ERR(0, 4809, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_chan), (&PyInt_Type), 0, "chan", 1))) __PYX_ERR(0, 4809, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pysndlib_3clm_530locsig_reverb_set(__pyx_self, __pyx_v_gen, __pyx_v_chan, __pyx_v_val);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_530locsig_reverb_set(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen, PyObject *__pyx_v_chan, double __pyx_v_val) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("locsig_reverb_set", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_8pysndlib_3clm_locsig_reverb_set(__pyx_v_gen, __pyx_v_chan, __pyx_v_val, 0); if (unlikely(__pyx_t_1 == ((double)-1) && PyErr_Occurred())) __PYX_ERR(0, 4809, __pyx_L1_error)
  __pyx_t_2 = PyFloat_FromDouble(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4809, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pysndlib.clm.locsig_reverb_set", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_40 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 4809, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  if (PyDict_SetItem(__pyx_t_40, __pyx_n_s_gen, __pyx_n_s_mus_any) < 0) __PYX_ERR(0, 4809, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_40, __pyx_n_s_chan, __pyx_n_s_int_2) < 0) __PYX_ERR(0, 4809, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_40, __pyx_n_s_val, __pyx_kp_s_cython_double) < 0) __PYX_ERR(0, 4809, __pyx_L1_error)
  __pyx_t_37 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_531locsig_reverb_set, 0, __pyx_n_s_locsig_reverb_set, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__532)); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 4809, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_37, __pyx_t_40);
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_locsig_reverb_set, __pyx_t_37) < 0) __PYX_ERR(0, 4809, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
/* … */
  __pyx_codeobj__532 = (PyObject*)__Pyx_PyCode_New(3, 0, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__529, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_locsig_reverb_set, 4809, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__532)) __PYX_ERR(0, 4809, __pyx_L1_error)
 4810:     """
 4811:     set the locsig reverb channel 'chan' scaler to 'val'.
 4812:     
 4813:     :param gen: locsig gen
 4814:     :param chan: channel to set
 4815:     :param val: value to set to
 4816:     :return: scaler of chan
 4817:     :rtype: float
 4818:     """
+4819:     return cclm.mus_locsig_reverb_set(gen._ptr, chan, val)
  __pyx_t_1 = __Pyx_PyInt_As_int(__pyx_v_chan); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 4819, __pyx_L1_error)
  __pyx_r = mus_locsig_reverb_set(__pyx_v_gen->_ptr, __pyx_t_1, __pyx_v_val);
  goto __pyx_L0;
 4820: 
+4821: cpdef void move_locsig(gen: mus_any, degree: cython.double, distance: cython.double):
static PyObject *__pyx_pw_8pysndlib_3clm_533move_locsig(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static void __pyx_f_8pysndlib_3clm_move_locsig(struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen, double __pyx_v_degree, double __pyx_v_distance, CYTHON_UNUSED int __pyx_skip_dispatch) {
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("move_locsig", 0);
/* … */
  /* function exit code */
  __Pyx_RefNannyFinishContext();
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_533move_locsig(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_532move_locsig, "\n    move locsig gen to reflect degree and distance.\n    \n    :param gen: locsig gen\n    :param degree: new degree\n    :param distance: new distance\n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_533move_locsig = {"move_locsig", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_533move_locsig, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_532move_locsig};
static PyObject *__pyx_pw_8pysndlib_3clm_533move_locsig(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen = 0;
  double __pyx_v_degree;
  double __pyx_v_distance;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("move_locsig (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_gen,&__pyx_n_s_degree,&__pyx_n_s_distance,0};
    PyObject* values[3] = {0,0,0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_gen)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 4821, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_degree)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 4821, __pyx_L3_error)
        else {
          __Pyx_RaiseArgtupleInvalid("move_locsig", 1, 3, 3, 1); __PYX_ERR(0, 4821, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_distance)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 4821, __pyx_L3_error)
        else {
          __Pyx_RaiseArgtupleInvalid("move_locsig", 1, 3, 3, 2); __PYX_ERR(0, 4821, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "move_locsig") < 0)) __PYX_ERR(0, 4821, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 3)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
      values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
      values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
    }
    __pyx_v_gen = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)values[0]);
    __pyx_v_degree = __pyx_PyFloat_AsDouble(values[1]); if (unlikely((__pyx_v_degree == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 4821, __pyx_L3_error)
    __pyx_v_distance = __pyx_PyFloat_AsDouble(values[2]); if (unlikely((__pyx_v_distance == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 4821, __pyx_L3_error)
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("move_locsig", 1, 3, 3, __pyx_nargs); __PYX_ERR(0, 4821, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.move_locsig", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_gen), __pyx_ptype_8pysndlib_3clm_mus_any, 0, "gen", 0))) __PYX_ERR(0, 4821, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pysndlib_3clm_532move_locsig(__pyx_self, __pyx_v_gen, __pyx_v_degree, __pyx_v_distance);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_532move_locsig(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_gen, double __pyx_v_degree, double __pyx_v_distance) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("move_locsig", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_f_8pysndlib_3clm_move_locsig(__pyx_v_gen, __pyx_v_degree, __pyx_v_distance, 0); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 4821, __pyx_L1_error)
  __pyx_t_1 = __Pyx_void_to_None(NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4821, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pysndlib.clm.move_locsig", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__533 = PyTuple_Pack(3, __pyx_n_s_gen, __pyx_n_s_degree, __pyx_n_s_distance); if (unlikely(!__pyx_tuple__533)) __PYX_ERR(0, 4821, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__533);
  __Pyx_GIVEREF(__pyx_tuple__533);
/* … */
  __pyx_t_37 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 4821, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  if (PyDict_SetItem(__pyx_t_37, __pyx_n_s_gen, __pyx_n_s_mus_any) < 0) __PYX_ERR(0, 4821, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_37, __pyx_n_s_degree, __pyx_kp_s_cython_double) < 0) __PYX_ERR(0, 4821, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_37, __pyx_n_s_distance, __pyx_kp_s_cython_double) < 0) __PYX_ERR(0, 4821, __pyx_L1_error)
  __pyx_t_40 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_533move_locsig, 0, __pyx_n_s_move_locsig, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__534)); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 4821, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_40, __pyx_t_37);
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_move_locsig, __pyx_t_40) < 0) __PYX_ERR(0, 4821, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
  __pyx_codeobj__534 = (PyObject*)__Pyx_PyCode_New(3, 0, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__533, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_move_locsig, 4821, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__534)) __PYX_ERR(0, 4821, __pyx_L1_error)
 4822:     """
 4823:     move locsig gen to reflect degree and distance.
 4824:     
 4825:     :param gen: locsig gen
 4826:     :param degree: new degree
 4827:     :param distance: new distance
 4828:     """
+4829:     cclm.mus_move_locsig(gen._ptr, degree, distance)
  mus_move_locsig(__pyx_v_gen->_ptr, __pyx_v_degree, __pyx_v_distance);
 4830: 
 4831: 
 4832: # added some options . todo: what about sample rate conversion    
+4833: cpdef convolve_files(file1: str, file2: str, maxamp: Optional[float]=1., outputfile='test.aif', sample_type=CLM.sample_type, header_type=CLM.header_type):
static PyObject *__pyx_pw_8pysndlib_3clm_535convolve_files(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyObject *__pyx_f_8pysndlib_3clm_convolve_files(PyObject *__pyx_v_file1, PyObject *__pyx_v_file2, CYTHON_UNUSED int __pyx_skip_dispatch, struct __pyx_opt_args_8pysndlib_3clm_convolve_files *__pyx_optional_args) {
  PyObject *__pyx_v_maxamp = ((PyObject *)__pyx_float_1_);
  PyObject *__pyx_v_outputfile = ((PyObject *)__pyx_kp_s_test_aif);
  PyObject *__pyx_v_sample_type = __pyx_k__54;
  PyObject *__pyx_v_header_type = __pyx_k__55;
  PyObject *__pyx_v_temp_file = NULL;
  mus_long_t __pyx_v_length;
  struct __pyx_obj_8pysndlib_3clm_mus_any *__pyx_v_reader = NULL;
  mus_long_t __pyx_v_i;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("convolve_files", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_maxamp = __pyx_optional_args->maxamp;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_outputfile = __pyx_optional_args->outputfile;
        if (__pyx_optional_args->__pyx_n > 2) {
          __pyx_v_sample_type = __pyx_optional_args->sample_type;
          if (__pyx_optional_args->__pyx_n > 3) {
            __pyx_v_header_type = __pyx_optional_args->header_type;
          }
        }
      }
    }
  }
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_AddTraceback("pysndlib.clm.convolve_files", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_temp_file);
  __Pyx_XDECREF((PyObject *)__pyx_v_reader);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_535convolve_files(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_8pysndlib_3clm_534convolve_files, "\n    convolve-files handles a very common special case: convolve two files, then normalize the result to some maxamp.\n    \n    :param file1: first file\n    :param file2: second file\n    :param maxamp: amp to scale to\n    :param outputfile: output file\n    :param sample_type: type of sample type to use. defaults to clm.sample_type\n    :param header_type: header of sample type to use. defaults to clm.header_type\n    :return: output file \n    :rtype: str\n    ");
static PyMethodDef __pyx_mdef_8pysndlib_3clm_535convolve_files = {"convolve_files", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_535convolve_files, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pysndlib_3clm_534convolve_files};
static PyObject *__pyx_pw_8pysndlib_3clm_535convolve_files(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_file1 = 0;
  PyObject *__pyx_v_file2 = 0;
  PyObject *__pyx_v_maxamp = 0;
  PyObject *__pyx_v_outputfile = 0;
  PyObject *__pyx_v_sample_type = 0;
  PyObject *__pyx_v_header_type = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("convolve_files (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_file1,&__pyx_n_s_file2,&__pyx_n_s_maxamp_3,&__pyx_n_s_outputfile,&__pyx_n_s_sample_type,&__pyx_n_s_header_type,0};
    PyObject* values[6] = {0,0,0,0,0,0};
    values[2] = ((PyObject *)__pyx_float_1_);
    values[3] = ((PyObject *)__pyx_kp_s_test_aif);
    values[4] = __pyx_k__54;
    values[5] = __pyx_k__55;
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  6: values[5] = __Pyx_Arg_FASTCALL(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = __Pyx_Arg_FASTCALL(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_file1)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 4833, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_file2)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 4833, __pyx_L3_error)
        else {
          __Pyx_RaiseArgtupleInvalid("convolve_files", 0, 2, 6, 1); __PYX_ERR(0, 4833, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_maxamp_3);
          if (value) { values[2] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 4833, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_outputfile);
          if (value) { values[3] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 4833, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_sample_type);
          if (value) { values[4] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 4833, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  5:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_header_type);
          if (value) { values[5] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 4833, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "convolve_files") < 0)) __PYX_ERR(0, 4833, __pyx_L3_error)
      }
    } else {
      switch (__pyx_nargs) {
        case  6: values[5] = __Pyx_Arg_FASTCALL(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = __Pyx_Arg_FASTCALL(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_file1 = ((PyObject*)values[0]);
    __pyx_v_file2 = ((PyObject*)values[1]);
    __pyx_v_maxamp = values[2];
    __pyx_v_outputfile = values[3];
    __pyx_v_sample_type = values[4];
    __pyx_v_header_type = values[5];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("convolve_files", 0, 2, 6, __pyx_nargs); __PYX_ERR(0, 4833, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.convolve_files", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_file1), (&PyString_Type), 0, "file1", 1))) __PYX_ERR(0, 4833, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_file2), (&PyString_Type), 0, "file2", 1))) __PYX_ERR(0, 4833, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pysndlib_3clm_534convolve_files(__pyx_self, __pyx_v_file1, __pyx_v_file2, __pyx_v_maxamp, __pyx_v_outputfile, __pyx_v_sample_type, __pyx_v_header_type);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_534convolve_files(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_file1, PyObject *__pyx_v_file2, PyObject *__pyx_v_maxamp, PyObject *__pyx_v_outputfile, PyObject *__pyx_v_sample_type, PyObject *__pyx_v_header_type) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("convolve_files", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2.__pyx_n = 4;
  __pyx_t_2.maxamp = __pyx_v_maxamp;
  __pyx_t_2.outputfile = __pyx_v_outputfile;
  __pyx_t_2.sample_type = __pyx_v_sample_type;
  __pyx_t_2.header_type = __pyx_v_header_type;
  __pyx_t_1 = __pyx_f_8pysndlib_3clm_convolve_files(__pyx_v_file1, __pyx_v_file2, 0, &__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4833, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pysndlib.clm.convolve_files", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __Pyx_GetModuleGlobalName(__pyx_t_40, __pyx_n_s_CLM); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 4833, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  __pyx_t_37 = __Pyx_PyObject_GetAttrStr(__pyx_t_40, __pyx_n_s_sample_type); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 4833, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
  __pyx_k__54 = __pyx_t_37;
  __Pyx_GIVEREF(__pyx_t_37);
  __pyx_t_37 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_37, __pyx_n_s_CLM); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 4833, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  __pyx_t_40 = __Pyx_PyObject_GetAttrStr(__pyx_t_37, __pyx_n_s_header_type); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 4833, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
  __pyx_k__55 = __pyx_t_40;
  __Pyx_GIVEREF(__pyx_t_40);
  __pyx_t_40 = 0;
/* … */
  __pyx_tuple__535 = PyTuple_Pack(6, __pyx_n_s_file1, __pyx_n_s_file2, __pyx_n_s_maxamp_3, __pyx_n_s_outputfile, __pyx_n_s_sample_type, __pyx_n_s_header_type); if (unlikely(!__pyx_tuple__535)) __PYX_ERR(0, 4833, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__535);
  __Pyx_GIVEREF(__pyx_tuple__535);
  __Pyx_GetModuleGlobalName(__pyx_t_40, __pyx_n_s_CLM); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 4833, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  __pyx_t_37 = __Pyx_PyObject_GetAttrStr(__pyx_t_40, __pyx_n_s_sample_type); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 4833, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_40, __pyx_n_s_CLM); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 4833, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  __pyx_t_41 = __Pyx_PyObject_GetAttrStr(__pyx_t_40, __pyx_n_s_header_type); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 4833, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
  __pyx_t_40 = PyTuple_New(4); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 4833, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  __Pyx_INCREF(__pyx_float_1_);
  __Pyx_GIVEREF(__pyx_float_1_);
  PyTuple_SET_ITEM(__pyx_t_40, 0, __pyx_float_1_);
  __Pyx_INCREF(__pyx_kp_s_test_aif);
  __Pyx_GIVEREF(__pyx_kp_s_test_aif);
  PyTuple_SET_ITEM(__pyx_t_40, 1, __pyx_kp_s_test_aif);
  __Pyx_GIVEREF(__pyx_t_37);
  PyTuple_SET_ITEM(__pyx_t_40, 2, __pyx_t_37);
  __Pyx_GIVEREF(__pyx_t_41);
  PyTuple_SET_ITEM(__pyx_t_40, 3, __pyx_t_41);
  __pyx_t_37 = 0;
  __pyx_t_41 = 0;
  __pyx_t_41 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 4833, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  if (PyDict_SetItem(__pyx_t_41, __pyx_n_s_file1, __pyx_n_s_str_2) < 0) __PYX_ERR(0, 4833, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_41, __pyx_n_s_file2, __pyx_n_s_str_2) < 0) __PYX_ERR(0, 4833, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_41, __pyx_n_s_maxamp_3, __pyx_kp_s_Optional_float) < 0) __PYX_ERR(0, 4833, __pyx_L1_error)
  __pyx_t_37 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_535convolve_files, 0, __pyx_n_s_convolve_files, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__536)); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 4833, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_37, __pyx_t_40);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_37, __pyx_t_41);
  __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_convolve_files, __pyx_t_37) < 0) __PYX_ERR(0, 4833, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
  __pyx_codeobj__536 = (PyObject*)__Pyx_PyCode_New(6, 0, 0, 6, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__535, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_convolve_files, 4833, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__536)) __PYX_ERR(0, 4833, __pyx_L1_error)
/* … */
struct __pyx_opt_args_8pysndlib_3clm_convolve_files {
  int __pyx_n;
  PyObject *maxamp;
  PyObject *outputfile;
  PyObject *sample_type;
  PyObject *header_type;
};
 4834:     """
 4835:     convolve-files handles a very common special case: convolve two files, then normalize the result to some maxamp.
 4836:     
 4837:     :param file1: first file
 4838:     :param file2: second file
 4839:     :param maxamp: amp to scale to
 4840:     :param outputfile: output file
 4841:     :param sample_type: type of sample type to use. defaults to clm.sample_type
 4842:     :param header_type: header of sample type to use. defaults to clm.header_type
 4843:     :return: output file 
 4844:     :rtype: str
 4845:     """
+4846:     if header_type == Header.NEXT:
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_Header); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4846, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_NEXT); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4846, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = PyObject_RichCompare(__pyx_v_header_type, __pyx_t_2, Py_EQ); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4846, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(0, 4846, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_3) {
/* … */
    goto __pyx_L3;
  }
+4847:         cclm.mus_convolve_files(file1, file2, maxamp,outputfile)
    __pyx_t_4 = __Pyx_PyObject_AsString(__pyx_v_file1); if (unlikely((!__pyx_t_4) && PyErr_Occurred())) __PYX_ERR(0, 4847, __pyx_L1_error)
    __pyx_t_5 = __Pyx_PyObject_AsString(__pyx_v_file2); if (unlikely((!__pyx_t_5) && PyErr_Occurred())) __PYX_ERR(0, 4847, __pyx_L1_error)
    __pyx_t_6 = __pyx_PyFloat_AsDouble(__pyx_v_maxamp); if (unlikely((__pyx_t_6 == ((mus_float_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 4847, __pyx_L1_error)
    __pyx_t_7 = __Pyx_PyObject_AsString(__pyx_v_outputfile); if (unlikely((!__pyx_t_7) && PyErr_Occurred())) __PYX_ERR(0, 4847, __pyx_L1_error)
    mus_convolve_files(__pyx_t_4, __pyx_t_5, __pyx_t_6, __pyx_t_7);
 4848:     else:
+4849:         temp_file = tempfile.gettempdir() + '/' + 'temp-' + outputfile
  /*else*/ {
    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_tempfile); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4849, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_gettempdir); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 4849, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_2 = NULL;
    __pyx_t_9 = 0;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_8))) {
      __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_8);
      if (likely(__pyx_t_2)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8);
        __Pyx_INCREF(__pyx_t_2);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_8, function);
        __pyx_t_9 = 1;
      }
    }
    {
      PyObject *__pyx_callargs[1] = {__pyx_t_2, };
      __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_8, __pyx_callargs+1-__pyx_t_9, 0+__pyx_t_9);
      __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4849, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    }
    __pyx_t_8 = PyNumber_Add(__pyx_t_1, __pyx_kp_s__56); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 4849, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_1 = PyNumber_Add(__pyx_t_8, __pyx_kp_s_temp); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4849, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __pyx_t_8 = PyNumber_Add(__pyx_t_1, __pyx_v_outputfile); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 4849, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_v_temp_file = __pyx_t_8;
    __pyx_t_8 = 0;
+4850:         cclm.mus_convolve_files(file1, file2, maxamp, temp_file)
    __pyx_t_4 = __Pyx_PyObject_AsString(__pyx_v_file1); if (unlikely((!__pyx_t_4) && PyErr_Occurred())) __PYX_ERR(0, 4850, __pyx_L1_error)
    __pyx_t_5 = __Pyx_PyObject_AsString(__pyx_v_file2); if (unlikely((!__pyx_t_5) && PyErr_Occurred())) __PYX_ERR(0, 4850, __pyx_L1_error)
    __pyx_t_6 = __pyx_PyFloat_AsDouble(__pyx_v_maxamp); if (unlikely((__pyx_t_6 == ((mus_float_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 4850, __pyx_L1_error)
    __pyx_t_7 = __Pyx_PyObject_AsString(__pyx_v_temp_file); if (unlikely((!__pyx_t_7) && PyErr_Occurred())) __PYX_ERR(0, 4850, __pyx_L1_error)
    mus_convolve_files(__pyx_t_4, __pyx_t_5, __pyx_t_6, __pyx_t_7);
+4851:         with Sound(outputfile, header_type=header_type, sample_type=sample_type):
    /*with:*/ {
      __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_Sound); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 4851, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4851, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_INCREF(__pyx_v_outputfile);
      __Pyx_GIVEREF(__pyx_v_outputfile);
      PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_outputfile);
      __pyx_t_2 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4851, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_header_type, __pyx_v_header_type) < 0) __PYX_ERR(0, 4851, __pyx_L1_error)
      if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_sample_type, __pyx_v_sample_type) < 0) __PYX_ERR(0, 4851, __pyx_L1_error)
      __pyx_t_10 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 4851, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_10);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_t_11 = __Pyx_PyObject_LookupSpecial(__pyx_t_10, __pyx_n_s_exit); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 4851, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_11);
      __pyx_t_1 = __Pyx_PyObject_LookupSpecial(__pyx_t_10, __pyx_n_s_enter); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4851, __pyx_L4_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_8 = NULL;
      __pyx_t_9 = 0;
      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) {
        __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_1);
        if (likely(__pyx_t_8)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
          __Pyx_INCREF(__pyx_t_8);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_1, function);
          __pyx_t_9 = 1;
        }
      }
      {
        PyObject *__pyx_callargs[1] = {__pyx_t_8, };
        __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_9, 0+__pyx_t_9);
        __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
        if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4851, __pyx_L4_error)
        __Pyx_GOTREF(__pyx_t_2);
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      }
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
      /*try:*/ {
        {
          /*try:*/ {
/* … */
          }
          __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
          __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
          __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
          goto __pyx_L13_try_end;
          __pyx_L8_error:;
          __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
          __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
          __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
          __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
          /*except:*/ {
            __Pyx_AddTraceback("pysndlib.clm.convolve_files", __pyx_clineno, __pyx_lineno, __pyx_filename);
            if (__Pyx_GetException(&__pyx_t_2, &__pyx_t_10, &__pyx_t_1) < 0) __PYX_ERR(0, 4851, __pyx_L10_except_error)
            __Pyx_GOTREF(__pyx_t_2);
            __Pyx_GOTREF(__pyx_t_10);
            __Pyx_GOTREF(__pyx_t_1);
            __pyx_t_8 = PyTuple_Pack(3, __pyx_t_2, __pyx_t_10, __pyx_t_1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 4851, __pyx_L10_except_error)
            __Pyx_GOTREF(__pyx_t_8);
            __pyx_t_20 = __Pyx_PyObject_Call(__pyx_t_11, __pyx_t_8, NULL);
            __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
            __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
            if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 4851, __pyx_L10_except_error)
            __Pyx_GOTREF(__pyx_t_20);
            __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_20);
            __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
            if (__pyx_t_3 < 0) __PYX_ERR(0, 4851, __pyx_L10_except_error)
            __pyx_t_21 = (!__pyx_t_3);
            if (unlikely(__pyx_t_21)) {
              __Pyx_GIVEREF(__pyx_t_2);
              __Pyx_GIVEREF(__pyx_t_10);
              __Pyx_XGIVEREF(__pyx_t_1);
              __Pyx_ErrRestoreWithState(__pyx_t_2, __pyx_t_10, __pyx_t_1);
              __pyx_t_2 = 0; __pyx_t_10 = 0; __pyx_t_1 = 0; 
              __PYX_ERR(0, 4851, __pyx_L10_except_error)
            }
            __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
            __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
            __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
            goto __pyx_L9_exception_handled;
          }
          __pyx_L10_except_error:;
          __Pyx_XGIVEREF(__pyx_t_12);
          __Pyx_XGIVEREF(__pyx_t_13);
          __Pyx_XGIVEREF(__pyx_t_14);
          __Pyx_ExceptionReset(__pyx_t_12, __pyx_t_13, __pyx_t_14);
          goto __pyx_L1_error;
          __pyx_L9_exception_handled:;
          __Pyx_XGIVEREF(__pyx_t_12);
          __Pyx_XGIVEREF(__pyx_t_13);
          __Pyx_XGIVEREF(__pyx_t_14);
          __Pyx_ExceptionReset(__pyx_t_12, __pyx_t_13, __pyx_t_14);
          __pyx_L13_try_end:;
        }
      }
      /*finally:*/ {
        /*normal exit:*/{
          if (__pyx_t_11) {
            __pyx_t_14 = __Pyx_PyObject_Call(__pyx_t_11, __pyx_tuple__57, NULL);
            __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
            if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 4851, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_14);
            __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
          }
          goto __pyx_L7;
        }
        __pyx_L7:;
      }
      goto __pyx_L19;
      __pyx_L4_error:;
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      goto __pyx_L1_error;
      __pyx_L19:;
    }
  }
  __pyx_L3:;
/* … */
  __pyx_tuple__57 = PyTuple_Pack(3, Py_None, Py_None, Py_None); if (unlikely(!__pyx_tuple__57)) __PYX_ERR(0, 4851, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__57);
  __Pyx_GIVEREF(__pyx_tuple__57);
+4852:             length = seconds2samples(csndlib.mus_sound_duration(temp_file))
            __pyx_t_15 = __Pyx_PyObject_AsString(__pyx_v_temp_file); if (unlikely((!__pyx_t_15) && PyErr_Occurred())) __PYX_ERR(0, 4852, __pyx_L8_error)
            __pyx_t_16 = __pyx_f_8pysndlib_3clm_seconds2samples(mus_sound_duration(__pyx_t_15), 0); if (unlikely(__pyx_t_16 == ((mus_long_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 4852, __pyx_L8_error)
            __pyx_v_length = __pyx_t_16;
+4853:             reader = make_readin(temp_file)
            if (!(likely(PyString_CheckExact(__pyx_v_temp_file))||((__pyx_v_temp_file) == Py_None) || __Pyx_RaiseUnexpectedTypeError("str", __pyx_v_temp_file))) __PYX_ERR(0, 4853, __pyx_L8_error)
            __pyx_t_10 = ((PyObject *)__pyx_f_8pysndlib_3clm_make_readin(((PyObject*)__pyx_v_temp_file), 0, NULL)); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 4853, __pyx_L8_error)
            __Pyx_GOTREF(__pyx_t_10);
            __pyx_v_reader = ((struct __pyx_obj_8pysndlib_3clm_mus_any *)__pyx_t_10);
            __pyx_t_10 = 0;
+4854:             for i in range(0, length):
            __pyx_t_16 = __pyx_v_length;
            __pyx_t_17 = __pyx_t_16;
            for (__pyx_t_18 = 0; __pyx_t_18 < __pyx_t_17; __pyx_t_18+=1) {
              __pyx_v_i = __pyx_t_18;
+4855:                 outa(i, readin(reader))
              __pyx_t_10 = __Pyx_PyInt_From_mus_long_t(__pyx_v_i); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 4855, __pyx_L8_error)
              __Pyx_GOTREF(__pyx_t_10);
              if (!(likely(__Pyx_Py3Int_CheckExact(__pyx_t_10)) || __Pyx_RaiseUnexpectedTypeError("int", __pyx_t_10))) __PYX_ERR(0, 4855, __pyx_L8_error)
              __pyx_t_19 = __pyx_f_8pysndlib_3clm_readin(__pyx_v_reader, 0); if (unlikely(__pyx_t_19 == ((double)-1) && PyErr_Occurred())) __PYX_ERR(0, 4855, __pyx_L8_error)
              __pyx_t_2 = __pyx_f_8pysndlib_3clm_outa(((PyObject*)__pyx_t_10), __pyx_t_19, 0, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4855, __pyx_L8_error)
              __Pyx_GOTREF(__pyx_t_2);
              __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
              __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
            }
+4856:     return outputfile
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_outputfile);
  __pyx_r = __pyx_v_outputfile;
  goto __pyx_L0;
 4857: 
 4858: 
 4859: #########################################
 4860: # basic file reading/writing to/from nympy arrays
 4861: # note all of this assumes numpy dtype is np.double
 4862: # also assumes shape is (chan, length)
 4863: # a mono file that is 8000 samples long should
 4864: # be a numpy array created with something like
 4865: # arr = np.zeroes((1,8000), dtype=np.double)
 4866: # librosa follows this convention
 4867: #  todo : look at allowing something like np.zeroes((8000), dtype=np.double)
 4868: # to just be treated as mono sound buffer 
 4869: # the python soundfile library does this differently 
 4870: # and would use 
 4871: # arr = np.zeros((8000,1), dtype=np.double))
 4872: # this seems less intuitive to me 
 4873: # very issue to translate with simple np.transpose()
 4874: 
 4875: 
 4876: # cpdef sndinfo(filename):
 4877: #     """returns a dictionary of info about a sound file including write date (data), sample rate (srate),
 4878: #     channels (chans), length in samples (samples), length in second (length), comment (comment), and loop information (loopinfo)"""
 4879: #     date = csndlib.mus_sound_write_date(filename)
 4880: #     srate = csndlib.mus_sound_srate(filename)
 4881: #     chans = csndlib.mus_sound_chans(filename)
 4882: #     samples = csndlib.mus_sound_samples(filename)
 4883: #     comment = csndlib.mus_sound_comment(filename) 
 4884: #     length = samples / (chans * srate)
 4885: # 
 4886: #     header_type = header(mus_sound_header_type(filename))
 4887: #     sample_type = sample(mus_sound_sample_type(filename))
 4888: #     
 4889: #     loop_info = mus_sound_loop_info(filename)
 4890: #     if loop_info:
 4891: #         loop_modes = [loop_info[6], loop_info[7]]
 4892: #         loop_starts = [loop_info[0], loop_info[2]]
 4893: #         loop_ends = [loop_info[1], loop_info[3]]
 4894: #         base_note = loop_info[4]
 4895: #         base_detune = loop_info[5]
 4896: #     
 4897: #         loop_info = {'sustain_start' : loop_starts[0], 'sustain_end' : loop_ends[0], 
 4898: #                     'release_start' : loop_starts[2], 'release_end' : loop_ends[1],
 4899: #                     'base_note' : base_note, 'base_detune' : base_detune, 
 4900: #                     'sustain_mode' : loop_modes[0], 'release_mode' : loop_modes[1]}
 4901: #     
 4902: #     info = {'date' : time.localtime(date), 'srate' : srate, 'chans' : chans, 'samples' : samples,
 4903: #             'comment' : comment, 'length' : length, 'header_type' : header_type, 'sample_type' : sample_type,
 4904: #             'loop_info' : loop_info}
 4905: #     return info
 4906: 
 4907: # def sound_loop_info(filename):
 4908: #     """returns a dictionary of info about a sound file including write date (data), sample rate (srate),
 4909: #     channels (chans), length in samples (samples), length in second (length), comment (comment), and loop information (loopinfo)"""
 4910: #     
 4911: #     loop_info = sndlib.mus_sound_loop_info(filename)
 4912: #     if loop_info:
 4913: #         loop_modes = [loop_info[6], loop_info[7]]
 4914: #         loop_starts = [loop_info[0], loop_info[2]]
 4915: #         loop_ends = [loop_info[1], loop_info[3]]
 4916: #         base_note = loop_info[4]
 4917: #         base_detune = loop_info[5]
 4918: #     
 4919: #         loop_info = {'sustain_start' : loop_starts[0], 'sustain_end' : loop_ends[0], 
 4920: #                     'release_start' : loop_starts[2], 'release_end' : loop_ends[1],
 4921: #                     'base_note' : base_note, 'base_detune' : base_detune, 
 4922: #                     'sustain_mode' : loop_modes[0], 'release_mode' : loop_modes[1]}
 4923: #     return info
 4924: #     
 4925: # cpdef np.ndarray file2array(filename: str, channel: Optional[int]=0, beg: Optional[int]=None, dur: Optional[int]=None):
 4926: #     """
 4927: #     return an ndarray with samples from file
 4928: #     """
 4929: #     length = dur or csndlib.mus_sound_framples(filename)
 4930: #     chans = csndlib.mus_sound_chans(filename)
 4931: #     srate = csndlib.mus_sound_srate(filename)
 4932: #     bg = beg or 0
 4933: #     out = np.zeros(length, dtype=np.double)
 4934: #     
 4935: #     cdef double [:] out_view = None
 4936: #     out_view = out
 4937: # 
 4938: #     csndlib.mus_file_to_array(filename,channel, bg, length, &out_view[0])
 4939: #     return out
 4940: #     
 4941: # def channel2array(filename: str, channel: Optional[int]=0, beg: Optional[int]=None, dur: Optional[int]=None): 
 4942: #     length = dur or mus_sound_framples(filename)
 4943: #     srate = mus_sound_srate(filename)
 4944: #     bg = beg or 0
 4945: #     out = np.zeros((1, length), dtype=np.double)
 4946: #     mus_file_to_array(filename,channel, bg, length, out[0].ctypes.data_as(ctypes.pointer(ctypes.c_double)))
 4947: #     return out
 4948: # 
 4949: # def calc_length(start, dur):
 4950: #     st = seconds2samples(start)
 4951: #     nd = seconds2samples(start+dur)
 4952: #     return st, nd
 4953: # 
 4954: # def convert_frequency(gen):
 4955: #     gen.frequency = hz2radians(gen.frequency)
 4956: #     return gen
 4957: # 
 4958: 
+4959: cdef class array_readin_gen:
struct __pyx_obj_8pysndlib_3clm_array_readin_gen {
  PyObject_HEAD
  PyArrayObject *_arr;
  int _chan;
  PY_LONG_LONG _start;
  int _direction;
  PY_LONG_LONG _location;
  PY_LONG_LONG _length;
  float _val;
};

 4960:     cdef np.ndarray _arr
 4961:     cdef int _chan
 4962:     cdef cython.longlong _start
 4963:     cdef int _direction
 4964:     cdef cython.longlong _location
 4965:     cdef cython.longlong _length
 4966:     cdef float _val
 4967: 
+4968:     def __init__(self, arr: npt.NDArray[np.float64], chan: Optional[int]=0, start: Optional[int]=0, direction: Optional[int]=1):
/* Python wrapper */
static int __pyx_pw_8pysndlib_3clm_16array_readin_gen_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_pw_8pysndlib_3clm_16array_readin_gen_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_arr = 0;
  PyObject *__pyx_v_chan = 0;
  PyObject *__pyx_v_start = 0;
  PyObject *__pyx_v_direction = 0;
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__init__ (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_arr,&__pyx_n_s_chan,&__pyx_n_s_start,&__pyx_n_s_direction,0};
    PyObject* values[4] = {0,0,0,0};
    values[1] = ((PyObject *)__pyx_int_0);
    values[2] = ((PyObject *)__pyx_int_0);
    values[3] = ((PyObject *)__pyx_int_1);
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  4: values[3] = __Pyx_Arg_VARARGS(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = __Pyx_Arg_VARARGS(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = __Pyx_Arg_VARARGS(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_VARARGS(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_VARARGS(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_arr)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 4968, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_chan);
          if (value) { values[1] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 4968, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_start);
          if (value) { values[2] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 4968, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_direction);
          if (value) { values[3] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 4968, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "__init__") < 0)) __PYX_ERR(0, 4968, __pyx_L3_error)
      }
    } else {
      switch (__pyx_nargs) {
        case  4: values[3] = __Pyx_Arg_VARARGS(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = __Pyx_Arg_VARARGS(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = __Pyx_Arg_VARARGS(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_VARARGS(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_arr = values[0];
    __pyx_v_chan = values[1];
    __pyx_v_start = values[2];
    __pyx_v_direction = values[3];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__init__", 0, 1, 4, __pyx_nargs); __PYX_ERR(0, 4968, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.array_readin_gen.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return -1;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pysndlib_3clm_16array_readin_gen___init__(((struct __pyx_obj_8pysndlib_3clm_array_readin_gen *)__pyx_v_self), __pyx_v_arr, __pyx_v_chan, __pyx_v_start, __pyx_v_direction);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_8pysndlib_3clm_16array_readin_gen___init__(struct __pyx_obj_8pysndlib_3clm_array_readin_gen *__pyx_v_self, PyObject *__pyx_v_arr, PyObject *__pyx_v_chan, PyObject *__pyx_v_start, PyObject *__pyx_v_direction) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__init__", 0);
/* … */
  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("pysndlib.clm.array_readin_gen.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+4969:         check_ndim(arr, 2)
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_check_ndim); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4969, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  __pyx_t_4 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
      __pyx_t_4 = 1;
    }
  }
  {
    PyObject *__pyx_callargs[3] = {__pyx_t_3, __pyx_v_arr, __pyx_int_2};
    __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 2+__pyx_t_4);
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4969, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+4970:         self._arr = arr
  if (!(likely(((__pyx_v_arr) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_arr, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 4970, __pyx_L1_error)
  __pyx_t_1 = __pyx_v_arr;
  __Pyx_INCREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF((PyObject *)__pyx_v_self->_arr);
  __Pyx_DECREF((PyObject *)__pyx_v_self->_arr);
  __pyx_v_self->_arr = ((PyArrayObject *)__pyx_t_1);
  __pyx_t_1 = 0;
+4971:         self._chan = chan
  __pyx_t_4 = __Pyx_PyInt_As_int(__pyx_v_chan); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 4971, __pyx_L1_error)
  __pyx_v_self->_chan = __pyx_t_4;
+4972:         self._start = start
  __pyx_t_5 = __Pyx_PyInt_As_PY_LONG_LONG(__pyx_v_start); if (unlikely((__pyx_t_5 == (PY_LONG_LONG)-1) && PyErr_Occurred())) __PYX_ERR(0, 4972, __pyx_L1_error)
  __pyx_v_self->_start = __pyx_t_5;
+4973:         self._direction = direction
  __pyx_t_4 = __Pyx_PyInt_As_int(__pyx_v_direction); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 4973, __pyx_L1_error)
  __pyx_v_self->_direction = __pyx_t_4;
+4974:         self._location = self._start
  __pyx_t_5 = __pyx_v_self->_start;
  __pyx_v_self->_location = __pyx_t_5;
+4975:         self._length = np.shape(arr)[1]
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4975, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_shape); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4975, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = NULL;
  __pyx_t_4 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
    if (likely(__pyx_t_2)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_2);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_3, function);
      __pyx_t_4 = 1;
    }
  }
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_v_arr};
    __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4);
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4975, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  }
  __pyx_t_3 = __Pyx_GetItemInt(__pyx_t_1, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4975, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_5 = __Pyx_PyInt_As_PY_LONG_LONG(__pyx_t_3); if (unlikely((__pyx_t_5 == (PY_LONG_LONG)-1) && PyErr_Occurred())) __PYX_ERR(0, 4975, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_v_self->_length = __pyx_t_5;
 4976: 
+4977:     @property
/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_16array_readin_gen_11mus_channel_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_8pysndlib_3clm_16array_readin_gen_11mus_channel_1__get__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_8pysndlib_3clm_16array_readin_gen_11mus_channel___get__(((struct __pyx_obj_8pysndlib_3clm_array_readin_gen *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_16array_readin_gen_11mus_channel___get__(struct __pyx_obj_8pysndlib_3clm_array_readin_gen *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pysndlib.clm.array_readin_gen.mus_channel.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 4978:     def mus_channel(self):
+4979:         return self._chan
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->_chan); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4979, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 4980: 
+4981:     @property
/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_16array_readin_gen_12mus_location_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_8pysndlib_3clm_16array_readin_gen_12mus_location_1__get__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_8pysndlib_3clm_16array_readin_gen_12mus_location___get__(((struct __pyx_obj_8pysndlib_3clm_array_readin_gen *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_16array_readin_gen_12mus_location___get__(struct __pyx_obj_8pysndlib_3clm_array_readin_gen *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pysndlib.clm.array_readin_gen.mus_location.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 4982:     def mus_location(self):
+4983:         return self._location
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyInt_From_PY_LONG_LONG(__pyx_v_self->_location); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4983, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 4984: 
+4985:     @mus_location.setter
/* Python wrapper */
static int __pyx_pw_8pysndlib_3clm_16array_readin_gen_12mus_location_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_v); /*proto*/
static int __pyx_pw_8pysndlib_3clm_16array_readin_gen_12mus_location_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_v) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_v), (&PyInt_Type), 0, "v", 1))) __PYX_ERR(0, 4986, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pysndlib_3clm_16array_readin_gen_12mus_location_2__set__(((struct __pyx_obj_8pysndlib_3clm_array_readin_gen *)__pyx_v_self), ((PyObject*)__pyx_v_v));
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_8pysndlib_3clm_16array_readin_gen_12mus_location_2__set__(struct __pyx_obj_8pysndlib_3clm_array_readin_gen *__pyx_v_self, PyObject *__pyx_v_v) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__set__", 0);
/* … */
  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("pysndlib.clm.array_readin_gen.mus_location.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 4986:     def mus_location(self, v: int):
+4987:        self._location = v
  __pyx_t_1 = __Pyx_PyInt_As_PY_LONG_LONG(__pyx_v_v); if (unlikely((__pyx_t_1 == (PY_LONG_LONG)-1) && PyErr_Occurred())) __PYX_ERR(0, 4987, __pyx_L1_error)
  __pyx_v_self->_location = __pyx_t_1;
 4988: 
+4989:     @property
/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_16array_readin_gen_13mus_increment_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_8pysndlib_3clm_16array_readin_gen_13mus_increment_1__get__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_8pysndlib_3clm_16array_readin_gen_13mus_increment___get__(((struct __pyx_obj_8pysndlib_3clm_array_readin_gen *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_16array_readin_gen_13mus_increment___get__(struct __pyx_obj_8pysndlib_3clm_array_readin_gen *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pysndlib.clm.array_readin_gen.mus_increment.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 4990:     def mus_increment(self):
+4991:         return self._direction
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->_direction); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4991, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 4992: 
+4993:     @mus_increment.setter
/* Python wrapper */
static int __pyx_pw_8pysndlib_3clm_16array_readin_gen_13mus_increment_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_v); /*proto*/
static int __pyx_pw_8pysndlib_3clm_16array_readin_gen_13mus_increment_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_v) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_v), (&PyInt_Type), 0, "v", 1))) __PYX_ERR(0, 4994, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pysndlib_3clm_16array_readin_gen_13mus_increment_2__set__(((struct __pyx_obj_8pysndlib_3clm_array_readin_gen *)__pyx_v_self), ((PyObject*)__pyx_v_v));
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_8pysndlib_3clm_16array_readin_gen_13mus_increment_2__set__(struct __pyx_obj_8pysndlib_3clm_array_readin_gen *__pyx_v_self, PyObject *__pyx_v_v) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__set__", 0);
/* … */
  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("pysndlib.clm.array_readin_gen.mus_increment.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 4994:     def mus_increment(self, v: int):
+4995:         self._direction = v
  __pyx_t_1 = __Pyx_PyInt_As_int(__pyx_v_v); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 4995, __pyx_L1_error)
  __pyx_v_self->_direction = __pyx_t_1;
 4996: 
+4997:     @property
/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_16array_readin_gen_10mus_length_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_8pysndlib_3clm_16array_readin_gen_10mus_length_1__get__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_8pysndlib_3clm_16array_readin_gen_10mus_length___get__(((struct __pyx_obj_8pysndlib_3clm_array_readin_gen *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_16array_readin_gen_10mus_length___get__(struct __pyx_obj_8pysndlib_3clm_array_readin_gen *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pysndlib.clm.array_readin_gen.mus_length.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 4998:     def mus_length(self):
+4999:         return self._length
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyInt_From_PY_LONG_LONG(__pyx_v_self->_length); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4999, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 5000: 
+5001:     def __call__(self):
/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_16array_readin_gen_3__call__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyObject *__pyx_pw_8pysndlib_3clm_16array_readin_gen_3__call__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__call__ (wrapper)", 0);
  if (unlikely(__pyx_nargs > 0)) {
    __Pyx_RaiseArgtupleInvalid("__call__", 1, 0, 0, __pyx_nargs); return NULL;}
  if (unlikely(__pyx_kwds) && __Pyx_NumKwargs_VARARGS(__pyx_kwds) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "__call__", 0))) return NULL;
  __pyx_r = __pyx_pf_8pysndlib_3clm_16array_readin_gen_2__call__(((struct __pyx_obj_8pysndlib_3clm_array_readin_gen *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_16array_readin_gen_2__call__(struct __pyx_obj_8pysndlib_3clm_array_readin_gen *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__call__", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_AddTraceback("pysndlib.clm.array_readin_gen.__call__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+5002:         self._location = max(0, min(self._location, self._length-1))
  __pyx_t_1 = (__pyx_v_self->_length - 1);
  __pyx_t_2 = __pyx_v_self->_location;
  if ((__pyx_t_1 < __pyx_t_2)) {
    __pyx_t_3 = __pyx_t_1;
  } else {
    __pyx_t_3 = __pyx_t_2;
  }
  __pyx_t_1 = __pyx_t_3;
  __pyx_t_4 = 0;
  if ((__pyx_t_1 > __pyx_t_4)) {
    __pyx_t_3 = __pyx_t_1;
  } else {
    __pyx_t_3 = __pyx_t_4;
  }
  __pyx_v_self->_location = __pyx_t_3;
+5003:         self._val = self._arr[self._chan][self._location]
  __pyx_t_5 = __Pyx_GetItemInt(((PyObject *)__pyx_v_self->_arr), __pyx_v_self->_chan, int, 1, __Pyx_PyInt_From_int, 0, 1, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5003, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_6 = __Pyx_GetItemInt(__pyx_t_5, __pyx_v_self->_location, PY_LONG_LONG, 1, __Pyx_PyInt_From_PY_LONG_LONG, 0, 1, 1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 5003, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_7 = __pyx_PyFloat_AsFloat(__pyx_t_6); if (unlikely((__pyx_t_7 == (float)-1) && PyErr_Occurred())) __PYX_ERR(0, 5003, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_v_self->_val = __pyx_t_7;
+5004:         self._location += self._direction
  __pyx_v_self->_location = (__pyx_v_self->_location + __pyx_v_self->_direction);
+5005:         return self._val
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_6 = PyFloat_FromDouble(__pyx_v_self->_val); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 5005, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_r = __pyx_t_6;
  __pyx_t_6 = 0;
  goto __pyx_L0;
 5006: 
+5007: cpdef array_readin_gen make_array_readin(arr: npt.NDArray[np.float64], chan: Optional[int]=0, start: Optional[int]=0, direction: Optional[int]=1):
static PyObject *__pyx_pw_8pysndlib_3clm_537make_array_readin(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static struct __pyx_obj_8pysndlib_3clm_array_readin_gen *__pyx_f_8pysndlib_3clm_make_array_readin(PyObject *__pyx_v_arr, CYTHON_UNUSED int __pyx_skip_dispatch, struct __pyx_opt_args_8pysndlib_3clm_make_array_readin *__pyx_optional_args) {
  PyObject *__pyx_v_chan = ((PyObject *)__pyx_int_0);
  PyObject *__pyx_v_start = ((PyObject *)__pyx_int_0);
  PyObject *__pyx_v_direction = ((PyObject *)__pyx_int_1);
  struct __pyx_obj_8pysndlib_3clm_array_readin_gen *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("make_array_readin", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_chan = __pyx_optional_args->chan;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_start = __pyx_optional_args->start;
        if (__pyx_optional_args->__pyx_n > 2) {
          __pyx_v_direction = __pyx_optional_args->direction;
        }
      }
    }
  }
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pysndlib.clm.make_array_readin", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_537make_array_readin(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_8pysndlib_3clm_537make_array_readin = {"make_array_readin", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_537make_array_readin, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_8pysndlib_3clm_537make_array_readin(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_arr = 0;
  PyObject *__pyx_v_chan = 0;
  PyObject *__pyx_v_start = 0;
  PyObject *__pyx_v_direction = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("make_array_readin (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_arr,&__pyx_n_s_chan,&__pyx_n_s_start,&__pyx_n_s_direction,0};
    PyObject* values[4] = {0,0,0,0};
    values[1] = ((PyObject *)__pyx_int_0);
    values[2] = ((PyObject *)__pyx_int_0);
    values[3] = ((PyObject *)__pyx_int_1);
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  4: values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_arr)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 5007, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_chan);
          if (value) { values[1] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 5007, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_start);
          if (value) { values[2] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 5007, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_direction);
          if (value) { values[3] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 5007, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "make_array_readin") < 0)) __PYX_ERR(0, 5007, __pyx_L3_error)
      }
    } else {
      switch (__pyx_nargs) {
        case  4: values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_arr = values[0];
    __pyx_v_chan = values[1];
    __pyx_v_start = values[2];
    __pyx_v_direction = values[3];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("make_array_readin", 0, 1, 4, __pyx_nargs); __PYX_ERR(0, 5007, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.make_array_readin", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pysndlib_3clm_536make_array_readin(__pyx_self, __pyx_v_arr, __pyx_v_chan, __pyx_v_start, __pyx_v_direction);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_536make_array_readin(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_arr, PyObject *__pyx_v_chan, PyObject *__pyx_v_start, PyObject *__pyx_v_direction) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("make_array_readin", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2.__pyx_n = 3;
  __pyx_t_2.chan = __pyx_v_chan;
  __pyx_t_2.start = __pyx_v_start;
  __pyx_t_2.direction = __pyx_v_direction;
  __pyx_t_1 = ((PyObject *)__pyx_f_8pysndlib_3clm_make_array_readin(__pyx_v_arr, 0, &__pyx_t_2)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5007, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pysndlib.clm.make_array_readin", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__539 = PyTuple_Pack(4, __pyx_n_s_arr, __pyx_n_s_chan, __pyx_n_s_start, __pyx_n_s_direction); if (unlikely(!__pyx_tuple__539)) __PYX_ERR(0, 5007, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__539);
  __Pyx_GIVEREF(__pyx_tuple__539);
  __pyx_codeobj__540 = (PyObject*)__Pyx_PyCode_New(4, 0, 0, 4, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__539, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_make_array_readin, 5007, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__540)) __PYX_ERR(0, 5007, __pyx_L1_error)
/* … */
  __pyx_t_37 = __Pyx_PyDict_NewPresized(4); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 5007, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  if (PyDict_SetItem(__pyx_t_37, __pyx_n_s_arr, __pyx_kp_s_npt_NDArray_np_float64) < 0) __PYX_ERR(0, 5007, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_37, __pyx_n_s_chan, __pyx_kp_s_Optional_int) < 0) __PYX_ERR(0, 5007, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_37, __pyx_n_s_start, __pyx_kp_s_Optional_int) < 0) __PYX_ERR(0, 5007, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_37, __pyx_n_s_direction, __pyx_kp_s_Optional_int) < 0) __PYX_ERR(0, 5007, __pyx_L1_error)
  __pyx_t_41 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_537make_array_readin, 0, __pyx_n_s_make_array_readin, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__540)); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 5007, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_41, __pyx_tuple__541);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_41, __pyx_t_37);
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_make_array_readin, __pyx_t_41) < 0) __PYX_ERR(0, 5007, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
  __pyx_tuple__541 = PyTuple_Pack(3, __pyx_int_0, __pyx_int_0, __pyx_int_1); if (unlikely(!__pyx_tuple__541)) __PYX_ERR(0, 5007, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__541);
  __Pyx_GIVEREF(__pyx_tuple__541);
/* … */
struct __pyx_opt_args_8pysndlib_3clm_make_array_readin {
  int __pyx_n;
  PyObject *chan;
  PyObject *start;
  PyObject *direction;
};
+5008:     return array_readin_gen(arr, chan, start, direction)
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __pyx_t_1 = PyTuple_New(4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5008, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_INCREF(__pyx_v_arr);
  __Pyx_GIVEREF(__pyx_v_arr);
  PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_arr);
  __Pyx_INCREF(__pyx_v_chan);
  __Pyx_GIVEREF(__pyx_v_chan);
  PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_chan);
  __Pyx_INCREF(__pyx_v_start);
  __Pyx_GIVEREF(__pyx_v_start);
  PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_v_start);
  __Pyx_INCREF(__pyx_v_direction);
  __Pyx_GIVEREF(__pyx_v_direction);
  PyTuple_SET_ITEM(__pyx_t_1, 3, __pyx_v_direction);
  __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8pysndlib_3clm_array_readin_gen), __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5008, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_r = ((struct __pyx_obj_8pysndlib_3clm_array_readin_gen *)__pyx_t_2);
  __pyx_t_2 = 0;
  goto __pyx_L0;
 5009: 
+5010: cpdef array_readin(gen: array_readin_gen):
static PyObject *__pyx_pw_8pysndlib_3clm_539array_readin(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyObject *__pyx_f_8pysndlib_3clm_array_readin(struct __pyx_obj_8pysndlib_3clm_array_readin_gen *__pyx_v_gen, CYTHON_UNUSED int __pyx_skip_dispatch) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("array_readin", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("pysndlib.clm.array_readin", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_539array_readin(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_8pysndlib_3clm_539array_readin = {"array_readin", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_539array_readin, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_8pysndlib_3clm_539array_readin(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_8pysndlib_3clm_array_readin_gen *__pyx_v_gen = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("array_readin (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_gen,0};
    PyObject* values[1] = {0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_gen)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 5010, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "array_readin") < 0)) __PYX_ERR(0, 5010, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
    }
    __pyx_v_gen = ((struct __pyx_obj_8pysndlib_3clm_array_readin_gen *)values[0]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("array_readin", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 5010, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.array_readin", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_gen), __pyx_ptype_8pysndlib_3clm_array_readin_gen, 0, "gen", 0))) __PYX_ERR(0, 5010, __pyx_L1_error)
  __pyx_r = __pyx_pf_8pysndlib_3clm_538array_readin(__pyx_self, __pyx_v_gen);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_538array_readin(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_8pysndlib_3clm_array_readin_gen *__pyx_v_gen) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("array_readin", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_8pysndlib_3clm_array_readin(__pyx_v_gen, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5010, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pysndlib.clm.array_readin", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_41 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 5010, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  if (PyDict_SetItem(__pyx_t_41, __pyx_n_s_gen, __pyx_n_s_array_readin_gen) < 0) __PYX_ERR(0, 5010, __pyx_L1_error)
  __pyx_t_37 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_539array_readin, 0, __pyx_n_s_array_readin, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__542)); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 5010, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_37, __pyx_t_41);
  __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_array_readin, __pyx_t_37) < 0) __PYX_ERR(0, 5010, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
/* … */
  __pyx_codeobj__542 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__46, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_array_readin, 5010, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__542)) __PYX_ERR(0, 5010, __pyx_L1_error)
+5011:     return gen()
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF((PyObject *)__pyx_v_gen);
  __pyx_t_2 = ((PyObject *)__pyx_v_gen); __pyx_t_3 = NULL;
  __pyx_t_4 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
      __pyx_t_4 = 1;
    }
  }
  {
    PyObject *__pyx_callargs[1] = {__pyx_t_3, };
    __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 0+__pyx_t_4);
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5011, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  }
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 5012: 
+5013: cpdef is_array_readin(gen):
static PyObject *__pyx_pw_8pysndlib_3clm_541is_array_readin(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyObject *__pyx_f_8pysndlib_3clm_is_array_readin(PyObject *__pyx_v_gen, CYTHON_UNUSED int __pyx_skip_dispatch) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_array_readin", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pysndlib.clm.is_array_readin", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_541is_array_readin(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_8pysndlib_3clm_541is_array_readin = {"is_array_readin", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_541is_array_readin, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_8pysndlib_3clm_541is_array_readin(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_gen = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_array_readin (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_gen,0};
    PyObject* values[1] = {0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_gen)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 5013, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "is_array_readin") < 0)) __PYX_ERR(0, 5013, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
    }
    __pyx_v_gen = values[0];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("is_array_readin", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 5013, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.is_array_readin", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pysndlib_3clm_540is_array_readin(__pyx_self, __pyx_v_gen);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_540is_array_readin(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_gen) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_array_readin", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_8pysndlib_3clm_is_array_readin(__pyx_v_gen, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5013, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pysndlib.clm.is_array_readin", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_37 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_541is_array_readin, 0, __pyx_n_s_is_array_readin, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__543)); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 5013, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_is_array_readin, __pyx_t_37) < 0) __PYX_ERR(0, 5013, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
/* … */
  __pyx_codeobj__543 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__46, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_is_array_readin, 5013, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__543)) __PYX_ERR(0, 5013, __pyx_L1_error)
+5014:     return isinstance(gen, array_readin_gen)
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_TypeCheck(__pyx_v_gen, __pyx_ptype_8pysndlib_3clm_array_readin_gen); 
  __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5014, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;
 5015: 
 5016: 
 5017: 
 5018: 
 5019: 
 5020: 
 5021: 
 5022: # # todo: maybe add an exception that have to use keyword args
+5023: def make_generator(name, slots, wrapper=None, methods=None, docstring=None):
/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_543make_generator(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_8pysndlib_3clm_543make_generator = {"make_generator", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_543make_generator, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_8pysndlib_3clm_543make_generator(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_name = 0;
  PyObject *__pyx_v_slots = 0;
  PyObject *__pyx_v_wrapper = 0;
  PyObject *__pyx_v_methods = 0;
  PyObject *__pyx_v_docstring = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("make_generator (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_name,&__pyx_n_s_slots,&__pyx_n_s_wrapper,&__pyx_n_s_methods,&__pyx_n_s_docstring,0};
    PyObject* values[5] = {0,0,0,0,0};
    values[2] = ((PyObject *)((PyObject *)Py_None));
    values[3] = ((PyObject *)((PyObject *)Py_None));
    values[4] = ((PyObject *)((PyObject *)Py_None));
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  5: values[4] = __Pyx_Arg_FASTCALL(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_name)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 5023, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_slots)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 5023, __pyx_L3_error)
        else {
          __Pyx_RaiseArgtupleInvalid("make_generator", 0, 2, 5, 1); __PYX_ERR(0, 5023, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_wrapper);
          if (value) { values[2] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 5023, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_methods);
          if (value) { values[3] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 5023, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_docstring);
          if (value) { values[4] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 5023, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "make_generator") < 0)) __PYX_ERR(0, 5023, __pyx_L3_error)
      }
    } else {
      switch (__pyx_nargs) {
        case  5: values[4] = __Pyx_Arg_FASTCALL(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_name = values[0];
    __pyx_v_slots = values[1];
    __pyx_v_wrapper = values[2];
    __pyx_v_methods = values[3];
    __pyx_v_docstring = values[4];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("make_generator", 0, 2, 5, __pyx_nargs); __PYX_ERR(0, 5023, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.make_generator", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pysndlib_3clm_542make_generator(__pyx_self, __pyx_v_name, __pyx_v_slots, __pyx_v_wrapper, __pyx_v_methods, __pyx_v_docstring);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
static PyObject *__pyx_pf_8pysndlib_3clm_542make_generator(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_name, PyObject *__pyx_v_slots, PyObject *__pyx_v_wrapper, PyObject *__pyx_v_methods, PyObject *__pyx_v_docstring) {
  struct __pyx_obj_8pysndlib_3clm___pyx_scope_struct_4_make_generator *__pyx_cur_scope;
  PyObject *__pyx_v_make_generator = 0;
  PyObject *__pyx_v_is_a = 0;
  PyObject *__pyx_v_g = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("make_generator", 0);
  __pyx_cur_scope = (struct __pyx_obj_8pysndlib_3clm___pyx_scope_struct_4_make_generator *)__pyx_tp_new_8pysndlib_3clm___pyx_scope_struct_4_make_generator(__pyx_ptype_8pysndlib_3clm___pyx_scope_struct_4_make_generator, __pyx_empty_tuple, NULL);
  if (unlikely(!__pyx_cur_scope)) {
    __pyx_cur_scope = ((struct __pyx_obj_8pysndlib_3clm___pyx_scope_struct_4_make_generator *)Py_None);
    __Pyx_INCREF(Py_None);
    __PYX_ERR(0, 5023, __pyx_L1_error)
  } else {
    __Pyx_GOTREF((PyObject *)__pyx_cur_scope);
  }
  __pyx_cur_scope->__pyx_v_name = __pyx_v_name;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_name);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_name);
  __pyx_cur_scope->__pyx_v_wrapper = __pyx_v_wrapper;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_wrapper);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_wrapper);
  __pyx_cur_scope->__pyx_v_methods = __pyx_v_methods;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_methods);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_methods);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("pysndlib.clm.make_generator", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_make_generator);
  __Pyx_XDECREF(__pyx_v_is_a);
  __Pyx_XDECREF(__pyx_v_g);
  __Pyx_DECREF((PyObject *)__pyx_cur_scope);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__544 = PyTuple_Pack(11, __pyx_n_s_name, __pyx_n_s_slots, __pyx_n_s_wrapper, __pyx_n_s_methods, __pyx_n_s_docstring, __pyx_n_s_mus_gen, __pyx_n_s_make_generator, __pyx_n_s_make_generator, __pyx_n_s_is_a, __pyx_n_s_is_a, __pyx_n_s_g); if (unlikely(!__pyx_tuple__544)) __PYX_ERR(0, 5023, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__544);
  __Pyx_GIVEREF(__pyx_tuple__544);
  __pyx_codeobj__545 = (PyObject*)__Pyx_PyCode_New(5, 0, 0, 11, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__544, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_make_generator, 5023, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__545)) __PYX_ERR(0, 5023, __pyx_L1_error)
/* … */
  __pyx_t_37 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_543make_generator, 0, __pyx_n_s_make_generator, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__545)); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 5023, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_37, __pyx_tuple__546);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_make_generator, __pyx_t_37) < 0) __PYX_ERR(0, 5023, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
  __pyx_tuple__546 = PyTuple_Pack(3, ((PyObject *)Py_None), ((PyObject *)Py_None), ((PyObject *)Py_None)); if (unlikely(!__pyx_tuple__546)) __PYX_ERR(0, 5023, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__546);
  __Pyx_GIVEREF(__pyx_tuple__546);
/* … */
struct __pyx_obj_8pysndlib_3clm___pyx_scope_struct_4_make_generator {
  PyObject_HEAD
  PyObject *__pyx_v_methods;
  PyObject *__pyx_v_mus_gen;
  PyObject *__pyx_v_name;
  PyObject *__pyx_v_wrapper;
};

+5024:     class mus_gen():
  __pyx_t_1 = __Pyx_Py3MetaclassPrepare((PyObject *) NULL, __pyx_empty_tuple, __pyx_n_s_mus_gen, __pyx_n_s_make_generator_locals_mus_gen, (PyObject *) NULL, __pyx_n_s_pysndlib_clm, (PyObject *) NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5024, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_Py3ClassCreate(((PyObject*)&PyType_Type), __pyx_n_s_mus_gen, __pyx_empty_tuple, __pyx_t_1, NULL, 0, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5024, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_2);
  __pyx_cur_scope->__pyx_v_mus_gen = __pyx_t_2;
  __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 5025:         pass
+5026:     def make_generator(**kwargs):
/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_14make_generator_1make_generator(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_8pysndlib_3clm_14make_generator_1make_generator = {"make_generator", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_14make_generator_1make_generator, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_8pysndlib_3clm_14make_generator_1make_generator(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_kwargs = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("make_generator (wrapper)", 0);
  if (unlikely(__pyx_nargs > 0)) {
    __Pyx_RaiseArgtupleInvalid("make_generator", 1, 0, 0, __pyx_nargs); return NULL;}
  if (__pyx_kwds && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "make_generator", 1))) return NULL;
  if (__pyx_kwds) {
    __pyx_v_kwargs = __Pyx_KwargsAsDict_FASTCALL(__pyx_kwds, __pyx_kwvalues);
    if (unlikely(!__pyx_v_kwargs)) return NULL;
    __Pyx_GOTREF(__pyx_v_kwargs);
  } else {
    __pyx_v_kwargs = PyDict_New();
    if (unlikely(!__pyx_v_kwargs)) return NULL;
    __Pyx_GOTREF(__pyx_v_kwargs);
  }
  __pyx_r = __pyx_pf_8pysndlib_3clm_14make_generator_make_generator(__pyx_self, __pyx_v_kwargs);

  /* function exit code */
  __Pyx_DECREF(__pyx_v_kwargs);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_14make_generator_make_generator(PyObject *__pyx_self, PyObject *__pyx_v_kwargs) {
  struct __pyx_obj_8pysndlib_3clm___pyx_scope_struct_4_make_generator *__pyx_cur_scope;
  struct __pyx_obj_8pysndlib_3clm___pyx_scope_struct_4_make_generator *__pyx_outer_scope;
  PyObject *__pyx_v_gen = NULL;
  PyObject *__pyx_v_k = NULL;
  PyObject *__pyx_v_v = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("make_generator", 0);
  __pyx_outer_scope = (struct __pyx_obj_8pysndlib_3clm___pyx_scope_struct_4_make_generator *) __Pyx_CyFunction_GetClosure(__pyx_self);
  __pyx_cur_scope = __pyx_outer_scope;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_AddTraceback("pysndlib.clm.make_generator.make_generator", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_gen);
  __Pyx_XDECREF(__pyx_v_k);
  __Pyx_XDECREF(__pyx_v_v);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__58 = PyTuple_Pack(4, __pyx_n_s_kwargs, __pyx_n_s_gen, __pyx_n_s_k, __pyx_n_s_v); if (unlikely(!__pyx_tuple__58)) __PYX_ERR(0, 5026, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__58);
  __Pyx_GIVEREF(__pyx_tuple__58);
/* … */
  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_14make_generator_1make_generator, 0, __pyx_n_s_make_generator_locals_make_gener, ((PyObject*)__pyx_cur_scope), __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__59)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5026, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_make_generator = __pyx_t_1;
  __pyx_t_1 = 0;
  __pyx_codeobj__59 = (PyObject*)__Pyx_PyCode_New(0, 0, 0, 4, 0, CO_OPTIMIZED|CO_NEWLOCALS|CO_VARKEYWORDS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__58, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_make_generator, 5026, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__59)) __PYX_ERR(0, 5026, __pyx_L1_error)
+5027:         gen = mus_gen()
  if (unlikely(!__pyx_cur_scope->__pyx_v_mus_gen)) { __Pyx_RaiseClosureNameError("mus_gen"); __PYX_ERR(0, 5027, __pyx_L1_error) }
  __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_cur_scope->__pyx_v_mus_gen); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5027, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_gen = __pyx_t_1;
  __pyx_t_1 = 0;
+5028:         setattr(gen, 'name', name)
  if (unlikely(!__pyx_cur_scope->__pyx_v_name)) { __Pyx_RaiseClosureNameError("name"); __PYX_ERR(0, 5028, __pyx_L1_error) }
  __pyx_t_1 = __pyx_cur_scope->__pyx_v_name;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_t_2 = PyObject_SetAttr(__pyx_v_gen, __pyx_n_s_name, __pyx_t_1); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 5028, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+5029:         for k, v  in kwargs.items():
  __pyx_t_3 = 0;
  __pyx_t_6 = __Pyx_dict_iterator(__pyx_v_kwargs, 1, __pyx_n_s_items, (&__pyx_t_4), (&__pyx_t_5)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 5029, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_1);
  __pyx_t_1 = __pyx_t_6;
  __pyx_t_6 = 0;
  while (1) {
    __pyx_t_8 = __Pyx_dict_iter_next(__pyx_t_1, __pyx_t_4, &__pyx_t_3, &__pyx_t_6, &__pyx_t_7, NULL, __pyx_t_5);
    if (unlikely(__pyx_t_8 == 0)) break;
    if (unlikely(__pyx_t_8 == -1)) __PYX_ERR(0, 5029, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_XDECREF_SET(__pyx_v_k, __pyx_t_6);
    __pyx_t_6 = 0;
    __Pyx_XDECREF_SET(__pyx_v_v, __pyx_t_7);
    __pyx_t_7 = 0;
+5030:             setattr(gen, k, v)
    __pyx_t_2 = PyObject_SetAttr(__pyx_v_gen, __pyx_v_k, __pyx_v_v); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 5030, __pyx_L1_error)
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+5031:         if methods:
  if (unlikely(!__pyx_cur_scope->__pyx_v_methods)) { __Pyx_RaiseClosureNameError("methods"); __PYX_ERR(0, 5031, __pyx_L1_error) }
  __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_cur_scope->__pyx_v_methods); if (unlikely((__pyx_t_9 < 0))) __PYX_ERR(0, 5031, __pyx_L1_error)
  if (__pyx_t_9) {
/* … */
  }
+5032:             for k, v  in methods.items():
    __pyx_t_4 = 0;
    if (unlikely(!__pyx_cur_scope->__pyx_v_methods)) { __Pyx_RaiseClosureNameError("methods"); __PYX_ERR(0, 5032, __pyx_L1_error) }
    if (unlikely(__pyx_cur_scope->__pyx_v_methods == Py_None)) {
      PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "items");
      __PYX_ERR(0, 5032, __pyx_L1_error)
    }
    __pyx_t_7 = __Pyx_dict_iterator(__pyx_cur_scope->__pyx_v_methods, 0, __pyx_n_s_items, (&__pyx_t_3), (&__pyx_t_5)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 5032, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_XDECREF(__pyx_t_1);
    __pyx_t_1 = __pyx_t_7;
    __pyx_t_7 = 0;
    while (1) {
      __pyx_t_8 = __Pyx_dict_iter_next(__pyx_t_1, __pyx_t_3, &__pyx_t_4, &__pyx_t_7, &__pyx_t_6, NULL, __pyx_t_5);
      if (unlikely(__pyx_t_8 == 0)) break;
      if (unlikely(__pyx_t_8 == -1)) __PYX_ERR(0, 5032, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_XDECREF_SET(__pyx_v_k, __pyx_t_7);
      __pyx_t_7 = 0;
      __Pyx_XDECREF_SET(__pyx_v_v, __pyx_t_6);
      __pyx_t_6 = 0;
+5033:                 setattr(mus_gen, k, property(v[0], v[1], None) )
      if (unlikely(!__pyx_cur_scope->__pyx_v_mus_gen)) { __Pyx_RaiseClosureNameError("mus_gen"); __PYX_ERR(0, 5033, __pyx_L1_error) }
      __pyx_t_6 = __pyx_cur_scope->__pyx_v_mus_gen;
      __Pyx_INCREF(__pyx_t_6);
      __pyx_t_7 = __Pyx_GetItemInt(__pyx_v_v, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 5033, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __pyx_t_10 = __Pyx_GetItemInt(__pyx_v_v, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 5033, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_10);
      __pyx_t_11 = PyTuple_New(3); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 5033, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_11);
      __Pyx_GIVEREF(__pyx_t_7);
      PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_t_7);
      __Pyx_GIVEREF(__pyx_t_10);
      PyTuple_SET_ITEM(__pyx_t_11, 1, __pyx_t_10);
      __Pyx_INCREF(Py_None);
      __Pyx_GIVEREF(Py_None);
      PyTuple_SET_ITEM(__pyx_t_11, 2, Py_None);
      __pyx_t_7 = 0;
      __pyx_t_10 = 0;
      __pyx_t_10 = __Pyx_PyObject_Call(__pyx_builtin_property, __pyx_t_11, NULL); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 5033, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_10);
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      __pyx_t_2 = PyObject_SetAttr(__pyx_t_6, __pyx_v_k, __pyx_t_10); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 5033, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
    }
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 5034: 
+5035:         return gen if not wrapper else wrapper(gen)
  __Pyx_XDECREF(__pyx_r);
  if (unlikely(!__pyx_cur_scope->__pyx_v_wrapper)) { __Pyx_RaiseClosureNameError("wrapper"); __PYX_ERR(0, 5035, __pyx_L1_error) }
  __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_cur_scope->__pyx_v_wrapper); if (unlikely((__pyx_t_9 < 0))) __PYX_ERR(0, 5035, __pyx_L1_error)
  if ((!__pyx_t_9)) {
    __Pyx_INCREF(__pyx_v_gen);
    __pyx_t_1 = __pyx_v_gen;
  } else {
    if (unlikely(!__pyx_cur_scope->__pyx_v_wrapper)) { __Pyx_RaiseClosureNameError("wrapper"); __PYX_ERR(0, 5035, __pyx_L1_error) }
    __Pyx_INCREF(__pyx_cur_scope->__pyx_v_wrapper);
    __pyx_t_6 = __pyx_cur_scope->__pyx_v_wrapper; __pyx_t_11 = NULL;
    __pyx_t_5 = 0;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_6))) {
      __pyx_t_11 = PyMethod_GET_SELF(__pyx_t_6);
      if (likely(__pyx_t_11)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
        __Pyx_INCREF(__pyx_t_11);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_6, function);
        __pyx_t_5 = 1;
      }
    }
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_11, __pyx_v_gen};
      __pyx_t_10 = __Pyx_PyObject_FastCall(__pyx_t_6, __pyx_callargs+1-__pyx_t_5, 1+__pyx_t_5);
      __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
      if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 5035, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_10);
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    }
    __pyx_t_1 = __pyx_t_10;
    __pyx_t_10 = 0;
  }
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
+5036:     def is_a(gen):
/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_14make_generator_3is_a(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_8pysndlib_3clm_14make_generator_3is_a = {"is_a", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_14make_generator_3is_a, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_8pysndlib_3clm_14make_generator_3is_a(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_gen = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_a (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_gen,0};
    PyObject* values[1] = {0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_gen)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 5036, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "is_a") < 0)) __PYX_ERR(0, 5036, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
    }
    __pyx_v_gen = values[0];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("is_a", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 5036, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.make_generator.is_a", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pysndlib_3clm_14make_generator_2is_a(__pyx_self, __pyx_v_gen);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_14make_generator_2is_a(PyObject *__pyx_self, PyObject *__pyx_v_gen) {
  struct __pyx_obj_8pysndlib_3clm___pyx_scope_struct_4_make_generator *__pyx_cur_scope;
  struct __pyx_obj_8pysndlib_3clm___pyx_scope_struct_4_make_generator *__pyx_outer_scope;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_a", 0);
  __pyx_outer_scope = (struct __pyx_obj_8pysndlib_3clm___pyx_scope_struct_4_make_generator *) __Pyx_CyFunction_GetClosure(__pyx_self);
  __pyx_cur_scope = __pyx_outer_scope;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("pysndlib.clm.make_generator.is_a", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_14make_generator_3is_a, 0, __pyx_n_s_make_generator_locals_is_a, ((PyObject*)__pyx_cur_scope), __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__60)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5036, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_is_a = __pyx_t_1;
  __pyx_t_1 = 0;
/* … */
  __pyx_codeobj__60 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__46, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_is_a, 5036, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__60)) __PYX_ERR(0, 5036, __pyx_L1_error)
+5037:         return isinstance(gen, mus_gen) and gen.name == name
  __Pyx_XDECREF(__pyx_r);
  if (unlikely(!__pyx_cur_scope->__pyx_v_mus_gen)) { __Pyx_RaiseClosureNameError("mus_gen"); __PYX_ERR(0, 5037, __pyx_L1_error) }
  __pyx_t_2 = __pyx_cur_scope->__pyx_v_mus_gen;
  __Pyx_INCREF(__pyx_t_2);
  __pyx_t_3 = PyObject_IsInstance(__pyx_v_gen, __pyx_t_2); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(0, 5037, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (__pyx_t_3) {
  } else {
    __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5037, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_1 = __pyx_t_2;
    __pyx_t_2 = 0;
    goto __pyx_L3_bool_binop_done;
  }
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_gen, __pyx_n_s_name); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5037, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (unlikely(!__pyx_cur_scope->__pyx_v_name)) { __Pyx_RaiseClosureNameError("name"); __PYX_ERR(0, 5037, __pyx_L1_error) }
  __pyx_t_4 = PyObject_RichCompare(__pyx_t_2, __pyx_cur_scope->__pyx_v_name, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 5037, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_INCREF(__pyx_t_4);
  __pyx_t_1 = __pyx_t_4;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_L3_bool_binop_done:;
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
+5038:     g =  partial(make_generator, **slots)
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_partial); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5038, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5038, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(__pyx_v_make_generator);
  __Pyx_GIVEREF(__pyx_v_make_generator);
  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_make_generator);
  if (unlikely(__pyx_v_slots == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "argument after ** must be a mapping, not NoneType");
    __PYX_ERR(0, 5038, __pyx_L1_error)
  }
  if (likely(PyDict_CheckExact(__pyx_v_slots))) {
    __pyx_t_3 = PyDict_Copy(__pyx_v_slots); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5038, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
  } else {
    __pyx_t_3 = __Pyx_PyObject_CallOneArg((PyObject*)&PyDict_Type, __pyx_v_slots); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5038, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
  }
  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 5038, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_v_g = __pyx_t_4;
  __pyx_t_4 = 0;
+5039:     if docstring:
  __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_v_docstring); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 5039, __pyx_L1_error)
  if (__pyx_t_5) {
/* … */
  }
+5040:         g.__doc__ = docstring
    if (__Pyx_PyObject_SetAttrStr(__pyx_v_g, __pyx_n_s_doc, __pyx_v_docstring) < 0) __PYX_ERR(0, 5040, __pyx_L1_error)
 5041: 
+5042:     return g, is_a
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 5042, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_INCREF(__pyx_v_g);
  __Pyx_GIVEREF(__pyx_v_g);
  PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v_g);
  __Pyx_INCREF(__pyx_v_is_a);
  __Pyx_GIVEREF(__pyx_v_is_a);
  PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_v_is_a);
  __pyx_r = __pyx_t_4;
  __pyx_t_4 = 0;
  goto __pyx_L0;
 5043: 
 5044: 
 5045: 
+5046: def _clip(x, lo, hi):
/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_545_clip(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_8pysndlib_3clm_545_clip = {"_clip", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_545_clip, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_8pysndlib_3clm_545_clip(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_x = 0;
  PyObject *__pyx_v_lo = 0;
  PyObject *__pyx_v_hi = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_clip (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_x,&__pyx_n_s_lo,&__pyx_n_s_hi,0};
    PyObject* values[3] = {0,0,0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_x)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 5046, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_lo)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 5046, __pyx_L3_error)
        else {
          __Pyx_RaiseArgtupleInvalid("_clip", 1, 3, 3, 1); __PYX_ERR(0, 5046, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_hi)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 5046, __pyx_L3_error)
        else {
          __Pyx_RaiseArgtupleInvalid("_clip", 1, 3, 3, 2); __PYX_ERR(0, 5046, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "_clip") < 0)) __PYX_ERR(0, 5046, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 3)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
      values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
      values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
    }
    __pyx_v_x = values[0];
    __pyx_v_lo = values[1];
    __pyx_v_hi = values[2];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("_clip", 1, 3, 3, __pyx_nargs); __PYX_ERR(0, 5046, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm._clip", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pysndlib_3clm_544_clip(__pyx_self, __pyx_v_x, __pyx_v_lo, __pyx_v_hi);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_544_clip(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_x, PyObject *__pyx_v_lo, PyObject *__pyx_v_hi) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_clip", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("pysndlib.clm._clip", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__547 = PyTuple_Pack(3, __pyx_n_s_x, __pyx_n_s_lo, __pyx_n_s_hi); if (unlikely(!__pyx_tuple__547)) __PYX_ERR(0, 5046, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__547);
  __Pyx_GIVEREF(__pyx_tuple__547);
/* … */
  __pyx_t_37 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_545_clip, 0, __pyx_n_s_clip, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__548)); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 5046, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_clip, __pyx_t_37) < 0) __PYX_ERR(0, 5046, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
  __pyx_codeobj__548 = (PyObject*)__Pyx_PyCode_New(3, 0, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__547, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_clip, 5046, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__548)) __PYX_ERR(0, 5046, __pyx_L1_error)
+5047:     return max(min(x, hi),lo)
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_lo);
  __pyx_t_1 = __pyx_v_lo;
  __Pyx_INCREF(__pyx_v_hi);
  __pyx_t_2 = __pyx_v_hi;
  __Pyx_INCREF(__pyx_v_x);
  __pyx_t_3 = __pyx_v_x;
  __pyx_t_5 = PyObject_RichCompare(__pyx_t_2, __pyx_t_3, Py_LT); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5047, __pyx_L1_error)
  __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely((__pyx_t_6 < 0))) __PYX_ERR(0, 5047, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (__pyx_t_6) {
    __Pyx_INCREF(__pyx_t_2);
    __pyx_t_4 = __pyx_t_2;
  } else {
    __Pyx_INCREF(__pyx_t_3);
    __pyx_t_4 = __pyx_t_3;
  }
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_INCREF(__pyx_t_4);
  __pyx_t_2 = __pyx_t_4;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_3 = PyObject_RichCompare(__pyx_t_1, __pyx_t_2, Py_GT); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5047, __pyx_L1_error)
  __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely((__pyx_t_6 < 0))) __PYX_ERR(0, 5047, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (__pyx_t_6) {
    __Pyx_INCREF(__pyx_t_1);
    __pyx_t_4 = __pyx_t_1;
  } else {
    __Pyx_INCREF(__pyx_t_2);
    __pyx_t_4 = __pyx_t_2;
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_INCREF(__pyx_t_4);
  __pyx_r = __pyx_t_4;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  goto __pyx_L0;
 5048: 
 5049: 
+5050: def _wrap(x, lo, hi):
/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_547_wrap(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_8pysndlib_3clm_547_wrap = {"_wrap", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_547_wrap, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_8pysndlib_3clm_547_wrap(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_x = 0;
  PyObject *__pyx_v_lo = 0;
  PyObject *__pyx_v_hi = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_wrap (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_x,&__pyx_n_s_lo,&__pyx_n_s_hi,0};
    PyObject* values[3] = {0,0,0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_x)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 5050, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_lo)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 5050, __pyx_L3_error)
        else {
          __Pyx_RaiseArgtupleInvalid("_wrap", 1, 3, 3, 1); __PYX_ERR(0, 5050, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_hi)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 5050, __pyx_L3_error)
        else {
          __Pyx_RaiseArgtupleInvalid("_wrap", 1, 3, 3, 2); __PYX_ERR(0, 5050, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "_wrap") < 0)) __PYX_ERR(0, 5050, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 3)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
      values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
      values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
    }
    __pyx_v_x = values[0];
    __pyx_v_lo = values[1];
    __pyx_v_hi = values[2];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("_wrap", 1, 3, 3, __pyx_nargs); __PYX_ERR(0, 5050, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm._wrap", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pysndlib_3clm_546_wrap(__pyx_self, __pyx_v_x, __pyx_v_lo, __pyx_v_hi);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_546_wrap(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_x, PyObject *__pyx_v_lo, PyObject *__pyx_v_hi) {
  PyObject *__pyx_v_r = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_wrap", 0);
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_AddTraceback("pysndlib.clm._wrap", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_r);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__549 = PyTuple_Pack(4, __pyx_n_s_x, __pyx_n_s_lo, __pyx_n_s_hi, __pyx_n_s_r); if (unlikely(!__pyx_tuple__549)) __PYX_ERR(0, 5050, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__549);
  __Pyx_GIVEREF(__pyx_tuple__549);
/* … */
  __pyx_t_37 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_547_wrap, 0, __pyx_n_s_wrap, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__550)); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 5050, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_wrap, __pyx_t_37) < 0) __PYX_ERR(0, 5050, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
  __pyx_codeobj__550 = (PyObject*)__Pyx_PyCode_New(3, 0, 0, 4, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__549, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_wrap, 5050, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__550)) __PYX_ERR(0, 5050, __pyx_L1_error)
+5051:     r = hi-lo
  __pyx_t_1 = PyNumber_Subtract(__pyx_v_hi, __pyx_v_lo); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5051, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_r = __pyx_t_1;
  __pyx_t_1 = 0;
+5052:     if x >= lo and x <= hi:
  __pyx_t_1 = PyObject_RichCompare(__pyx_v_x, __pyx_v_lo, Py_GE); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5052, __pyx_L1_error)
  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(0, 5052, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_3) {
  } else {
    __pyx_t_2 = __pyx_t_3;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_1 = PyObject_RichCompare(__pyx_v_x, __pyx_v_hi, Py_LE); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5052, __pyx_L1_error)
  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(0, 5052, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_2 = __pyx_t_3;
  __pyx_L4_bool_binop_done:;
  if (__pyx_t_2) {
/* … */
  }
+5053:         return x
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_v_x);
    __pyx_r = __pyx_v_x;
    goto __pyx_L0;
+5054:     if x < lo:
  __pyx_t_1 = PyObject_RichCompare(__pyx_v_x, __pyx_v_lo, Py_LT); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5054, __pyx_L1_error)
  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 5054, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_2) {
/* … */
  }
+5055:         return hi + (math.fmod((x-lo), r))
    __Pyx_XDECREF(__pyx_r);
    __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_math); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 5055, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_fmod); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5055, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_4 = PyNumber_Subtract(__pyx_v_x, __pyx_v_lo); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 5055, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_6 = NULL;
    __pyx_t_7 = 0;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) {
      __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_5);
      if (likely(__pyx_t_6)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
        __Pyx_INCREF(__pyx_t_6);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_5, function);
        __pyx_t_7 = 1;
      }
    }
    {
      PyObject *__pyx_callargs[3] = {__pyx_t_6, __pyx_t_4, __pyx_v_r};
      __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_5, __pyx_callargs+1-__pyx_t_7, 2+__pyx_t_7);
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5055, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    }
    __pyx_t_5 = PyNumber_Add(__pyx_v_hi, __pyx_t_1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5055, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_r = __pyx_t_5;
    __pyx_t_5 = 0;
    goto __pyx_L0;
+5056:     if x > hi:
  __pyx_t_5 = PyObject_RichCompare(__pyx_v_x, __pyx_v_hi, Py_GT); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5056, __pyx_L1_error)
  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 5056, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (__pyx_t_2) {
/* … */
  }
+5057:         return lo + (math.fmod((x-hi), r))
    __Pyx_XDECREF(__pyx_r);
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_math); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5057, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_fmod); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 5057, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_1 = PyNumber_Subtract(__pyx_v_x, __pyx_v_hi); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5057, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_6 = NULL;
    __pyx_t_7 = 0;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) {
      __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_4);
      if (likely(__pyx_t_6)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
        __Pyx_INCREF(__pyx_t_6);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_4, function);
        __pyx_t_7 = 1;
      }
    }
    {
      PyObject *__pyx_callargs[3] = {__pyx_t_6, __pyx_t_1, __pyx_v_r};
      __pyx_t_5 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_7, 2+__pyx_t_7);
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5057, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    }
    __pyx_t_4 = PyNumber_Add(__pyx_v_lo, __pyx_t_5); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 5057, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_r = __pyx_t_4;
    __pyx_t_4 = 0;
    goto __pyx_L0;
 5058: 
+5059: def array_reader(arr, chan, loop=0):
/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_549array_reader(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_8pysndlib_3clm_549array_reader = {"array_reader", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_549array_reader, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_8pysndlib_3clm_549array_reader(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_arr = 0;
  PyObject *__pyx_v_chan = 0;
  PyObject *__pyx_v_loop = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("array_reader (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_arr,&__pyx_n_s_chan,&__pyx_n_s_loop,0};
    PyObject* values[3] = {0,0,0};
    values[2] = ((PyObject *)((PyObject *)__pyx_int_0));
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_arr)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 5059, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_chan)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 5059, __pyx_L3_error)
        else {
          __Pyx_RaiseArgtupleInvalid("array_reader", 0, 2, 3, 1); __PYX_ERR(0, 5059, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_loop);
          if (value) { values[2] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 5059, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "array_reader") < 0)) __PYX_ERR(0, 5059, __pyx_L3_error)
      }
    } else {
      switch (__pyx_nargs) {
        case  3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_arr = values[0];
    __pyx_v_chan = values[1];
    __pyx_v_loop = values[2];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("array_reader", 0, 2, 3, __pyx_nargs); __PYX_ERR(0, 5059, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.array_reader", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pysndlib_3clm_548array_reader(__pyx_self, __pyx_v_arr, __pyx_v_chan, __pyx_v_loop);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
static PyObject *__pyx_pf_8pysndlib_3clm_548array_reader(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_arr, PyObject *__pyx_v_chan, PyObject *__pyx_v_loop) {
  struct __pyx_obj_8pysndlib_3clm___pyx_scope_struct_5_array_reader *__pyx_cur_scope;
  PyObject *__pyx_v_reader = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("array_reader", 0);
  __pyx_cur_scope = (struct __pyx_obj_8pysndlib_3clm___pyx_scope_struct_5_array_reader *)__pyx_tp_new_8pysndlib_3clm___pyx_scope_struct_5_array_reader(__pyx_ptype_8pysndlib_3clm___pyx_scope_struct_5_array_reader, __pyx_empty_tuple, NULL);
  if (unlikely(!__pyx_cur_scope)) {
    __pyx_cur_scope = ((struct __pyx_obj_8pysndlib_3clm___pyx_scope_struct_5_array_reader *)Py_None);
    __Pyx_INCREF(Py_None);
    __PYX_ERR(0, 5059, __pyx_L1_error)
  } else {
    __Pyx_GOTREF((PyObject *)__pyx_cur_scope);
  }
  __pyx_cur_scope->__pyx_v_arr = __pyx_v_arr;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_arr);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_arr);
  __pyx_cur_scope->__pyx_v_chan = __pyx_v_chan;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_chan);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_chan);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_AddTraceback("pysndlib.clm.array_reader", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_reader);
  __Pyx_DECREF((PyObject *)__pyx_cur_scope);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__551 = PyTuple_Pack(8, __pyx_n_s_arr, __pyx_n_s_chan, __pyx_n_s_loop, __pyx_n_s_ind, __pyx_n_s_length, __pyx_n_s_reader, __pyx_n_s_reader, __pyx_n_s_reader); if (unlikely(!__pyx_tuple__551)) __PYX_ERR(0, 5059, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__551);
  __Pyx_GIVEREF(__pyx_tuple__551);
  __pyx_codeobj__552 = (PyObject*)__Pyx_PyCode_New(3, 0, 0, 8, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__551, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_array_reader, 5059, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__552)) __PYX_ERR(0, 5059, __pyx_L1_error)
/* … */
  __pyx_t_37 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_549array_reader, 0, __pyx_n_s_array_reader, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__552)); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 5059, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_37, __pyx_tuple__553);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_array_reader, __pyx_t_37) < 0) __PYX_ERR(0, 5059, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
  __pyx_tuple__553 = PyTuple_Pack(1, ((PyObject *)__pyx_int_0)); if (unlikely(!__pyx_tuple__553)) __PYX_ERR(0, 5059, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__553);
  __Pyx_GIVEREF(__pyx_tuple__553);
/* … */
struct __pyx_obj_8pysndlib_3clm___pyx_scope_struct_5_array_reader {
  PyObject_HEAD
  PyObject *__pyx_v_arr;
  PyObject *__pyx_v_chan;
  PyObject *__pyx_v_ind;
  PyObject *__pyx_v_length;
};

+5060:     ind = 0
  __Pyx_INCREF(__pyx_int_0);
  __Pyx_GIVEREF(__pyx_int_0);
  __pyx_cur_scope->__pyx_v_ind = __pyx_int_0;
+5061:     if chan > (clm_channels(arr)):
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_clm_channels); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5061, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  __pyx_t_4 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
      __pyx_t_4 = 1;
    }
  }
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_cur_scope->__pyx_v_arr};
    __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4);
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5061, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  }
  __pyx_t_2 = PyObject_RichCompare(__pyx_cur_scope->__pyx_v_chan, __pyx_t_1, Py_GT); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5061, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 5061, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (unlikely(__pyx_t_5)) {
/* … */
  }
+5062:         raise ValueError(f'array has {clm_channels(arr)} channels but {chan} asked for')
    __pyx_t_2 = PyTuple_New(5); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5062, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_6 = 0;
    __pyx_t_7 = 127;
    __Pyx_INCREF(__pyx_kp_u_array_has);
    __pyx_t_6 += 10;
    __Pyx_GIVEREF(__pyx_kp_u_array_has);
    PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_kp_u_array_has);
    __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_clm_channels); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5062, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_8 = NULL;
    __pyx_t_4 = 0;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
      __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_3);
      if (likely(__pyx_t_8)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
        __Pyx_INCREF(__pyx_t_8);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_3, function);
        __pyx_t_4 = 1;
      }
    }
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_8, __pyx_cur_scope->__pyx_v_arr};
      __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4);
      __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5062, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    }
    __pyx_t_3 = __Pyx_PyObject_FormatSimple(__pyx_t_1, __pyx_empty_unicode); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5062, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_7 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_3) > __pyx_t_7) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_3) : __pyx_t_7;
    __pyx_t_6 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_3);
    __Pyx_GIVEREF(__pyx_t_3);
    PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_3);
    __pyx_t_3 = 0;
    __Pyx_INCREF(__pyx_kp_u_channels_but);
    __pyx_t_6 += 14;
    __Pyx_GIVEREF(__pyx_kp_u_channels_but);
    PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_kp_u_channels_but);
    __pyx_t_3 = __Pyx_PyObject_FormatSimple(__pyx_cur_scope->__pyx_v_chan, __pyx_empty_unicode); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5062, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_7 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_3) > __pyx_t_7) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_3) : __pyx_t_7;
    __pyx_t_6 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_3);
    __Pyx_GIVEREF(__pyx_t_3);
    PyTuple_SET_ITEM(__pyx_t_2, 3, __pyx_t_3);
    __pyx_t_3 = 0;
    __Pyx_INCREF(__pyx_kp_u_asked_for);
    __pyx_t_6 += 10;
    __Pyx_GIVEREF(__pyx_kp_u_asked_for);
    PyTuple_SET_ITEM(__pyx_t_2, 4, __pyx_kp_u_asked_for);
    __pyx_t_3 = __Pyx_PyUnicode_Join(__pyx_t_2, 5, __pyx_t_6, __pyx_t_7); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5062, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5062, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __PYX_ERR(0, 5062, __pyx_L1_error)
+5063:     length = clm_length(arr)
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_clm_length); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5063, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_1 = NULL;
  __pyx_t_4 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_3);
    if (likely(__pyx_t_1)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_1);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_3, function);
      __pyx_t_4 = 1;
    }
  }
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_1, __pyx_cur_scope->__pyx_v_arr};
    __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4);
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5063, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  }
  __Pyx_GIVEREF(__pyx_t_2);
  __pyx_cur_scope->__pyx_v_length = __pyx_t_2;
  __pyx_t_2 = 0;
+5064:     if loop:
  __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_v_loop); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 5064, __pyx_L1_error)
  if (__pyx_t_5) {
/* … */
    goto __pyx_L4;
  }
+5065:         def reader(direction):
/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_12array_reader_1reader(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_8pysndlib_3clm_12array_reader_1reader = {"reader", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_12array_reader_1reader, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_8pysndlib_3clm_12array_reader_1reader(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_direction = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("reader (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_direction,0};
    PyObject* values[1] = {0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_direction)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 5065, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "reader") < 0)) __PYX_ERR(0, 5065, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
    }
    __pyx_v_direction = values[0];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("reader", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 5065, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.array_reader.reader", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pysndlib_3clm_12array_reader_reader(__pyx_self, __pyx_v_direction);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_12array_reader_reader(PyObject *__pyx_self, PyObject *__pyx_v_direction) {
  struct __pyx_obj_8pysndlib_3clm___pyx_scope_struct_5_array_reader *__pyx_cur_scope;
  struct __pyx_obj_8pysndlib_3clm___pyx_scope_struct_5_array_reader *__pyx_outer_scope;
  PyObject *__pyx_v_v = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("reader", 0);
  __pyx_outer_scope = (struct __pyx_obj_8pysndlib_3clm___pyx_scope_struct_5_array_reader *) __Pyx_CyFunction_GetClosure(__pyx_self);
  __pyx_cur_scope = __pyx_outer_scope;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("pysndlib.clm.array_reader.reader", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_v);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__61 = PyTuple_Pack(2, __pyx_n_s_direction, __pyx_n_s_v); if (unlikely(!__pyx_tuple__61)) __PYX_ERR(0, 5065, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__61);
  __Pyx_GIVEREF(__pyx_tuple__61);
/* … */
    __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_12array_reader_1reader, 0, __pyx_n_s_array_reader_locals_reader, ((PyObject*)__pyx_cur_scope), __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__62)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5065, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_v_reader = __pyx_t_2;
    __pyx_t_2 = 0;
  __pyx_codeobj__62 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__61, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_reader, 5065, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__62)) __PYX_ERR(0, 5065, __pyx_L1_error)
 5066:             nonlocal ind
+5067:             v = arr[chan][ind]
  if (unlikely(!__pyx_cur_scope->__pyx_v_arr)) { __Pyx_RaiseClosureNameError("arr"); __PYX_ERR(0, 5067, __pyx_L1_error) }
  if (unlikely(!__pyx_cur_scope->__pyx_v_chan)) { __Pyx_RaiseClosureNameError("chan"); __PYX_ERR(0, 5067, __pyx_L1_error) }
  __pyx_t_1 = __Pyx_PyObject_GetItem(__pyx_cur_scope->__pyx_v_arr, __pyx_cur_scope->__pyx_v_chan); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5067, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (unlikely(!__pyx_cur_scope->__pyx_v_ind)) { __Pyx_RaiseClosureNameError("ind"); __PYX_ERR(0, 5067, __pyx_L1_error) }
  __pyx_t_2 = __Pyx_PyObject_GetItem(__pyx_t_1, __pyx_cur_scope->__pyx_v_ind); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5067, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_v = __pyx_t_2;
  __pyx_t_2 = 0;
+5068:             ind += direction
  if (unlikely(!__pyx_cur_scope->__pyx_v_ind)) { __Pyx_RaiseClosureNameError("ind"); __PYX_ERR(0, 5068, __pyx_L1_error) }
  __pyx_t_2 = PyNumber_InPlaceAdd(__pyx_cur_scope->__pyx_v_ind, __pyx_v_direction); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5068, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_ind);
  __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_ind, __pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_2);
  __pyx_t_2 = 0;
+5069:             ind = _wrap(ind, 0, length-1)
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_wrap); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5069, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (unlikely(!__pyx_cur_scope->__pyx_v_length)) { __Pyx_RaiseClosureNameError("length"); __PYX_ERR(0, 5069, __pyx_L1_error) }
  __pyx_t_3 = __Pyx_PyInt_SubtractObjC(__pyx_cur_scope->__pyx_v_length, __pyx_int_1, 1, 0, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5069, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = NULL;
  __pyx_t_5 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) {
    __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_1);
    if (likely(__pyx_t_4)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
      __Pyx_INCREF(__pyx_t_4);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_1, function);
      __pyx_t_5 = 1;
    }
  }
  {
    PyObject *__pyx_callargs[4] = {__pyx_t_4, __pyx_cur_scope->__pyx_v_ind, __pyx_int_0, __pyx_t_3};
    __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_5, 3+__pyx_t_5);
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5069, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  }
  __Pyx_GOTREF(__pyx_cur_scope->__pyx_v_ind);
  __Pyx_DECREF_SET(__pyx_cur_scope->__pyx_v_ind, __pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_2);
  __pyx_t_2 = 0;
+5070:             return v
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_v);
  __pyx_r = __pyx_v_v;
  goto __pyx_L0;
 5071: 
 5072:     else:
+5073:         def reader(direction):
/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_12array_reader_3reader(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_8pysndlib_3clm_12array_reader_3reader = {"reader", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_12array_reader_3reader, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_8pysndlib_3clm_12array_reader_3reader(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_direction = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("reader (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_direction,0};
    PyObject* values[1] = {0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_direction)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 5073, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "reader") < 0)) __PYX_ERR(0, 5073, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
    }
    __pyx_v_direction = values[0];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("reader", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 5073, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.array_reader.reader", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pysndlib_3clm_12array_reader_2reader(__pyx_self, __pyx_v_direction);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_12array_reader_2reader(PyObject *__pyx_self, PyObject *__pyx_v_direction) {
  struct __pyx_obj_8pysndlib_3clm___pyx_scope_struct_5_array_reader *__pyx_cur_scope;
  struct __pyx_obj_8pysndlib_3clm___pyx_scope_struct_5_array_reader *__pyx_outer_scope;
  PyObject *__pyx_v_v = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("reader", 0);
  __pyx_outer_scope = (struct __pyx_obj_8pysndlib_3clm___pyx_scope_struct_5_array_reader *) __Pyx_CyFunction_GetClosure(__pyx_self);
  __pyx_cur_scope = __pyx_outer_scope;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("pysndlib.clm.array_reader.reader", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_v);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  /*else*/ {
    __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_12array_reader_3reader, 0, __pyx_n_s_array_reader_locals_reader, ((PyObject*)__pyx_cur_scope), __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__63)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5073, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_v_reader = __pyx_t_2;
    __pyx_t_2 = 0;
  }
  __pyx_L4:;
/* … */
  __pyx_codeobj__63 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__61, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_reader, 5073, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__63)) __PYX_ERR(0, 5073, __pyx_L1_error)
 5074:             nonlocal ind
+5075:             v = arr[chan][ind]
  if (unlikely(!__pyx_cur_scope->__pyx_v_arr)) { __Pyx_RaiseClosureNameError("arr"); __PYX_ERR(0, 5075, __pyx_L1_error) }
  if (unlikely(!__pyx_cur_scope->__pyx_v_chan)) { __Pyx_RaiseClosureNameError("chan"); __PYX_ERR(0, 5075, __pyx_L1_error) }
  __pyx_t_1 = __Pyx_PyObject_GetItem(__pyx_cur_scope->__pyx_v_arr, __pyx_cur_scope->__pyx_v_chan); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5075, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (unlikely(!__pyx_cur_scope->__pyx_v_ind)) { __Pyx_RaiseClosureNameError("ind"); __PYX_ERR(0, 5075, __pyx_L1_error) }
  __pyx_t_2 = __Pyx_PyObject_GetItem(__pyx_t_1, __pyx_cur_scope->__pyx_v_ind); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5075, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_v = __pyx_t_2;
  __pyx_t_2 = 0;
+5076:             ind += direction
  if (unlikely(!__pyx_cur_scope->__pyx_v_ind)) { __Pyx_RaiseClosureNameError("ind"); __PYX_ERR(0, 5076, __pyx_L1_error) }
  __pyx_t_2 = PyNumber_InPlaceAdd(__pyx_cur_scope->__pyx_v_ind, __pyx_v_direction); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5076, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_ind);
  __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_ind, __pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_2);
  __pyx_t_2 = 0;
+5077:             ind = _clip(ind, 0, length-1)
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_clip); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5077, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (unlikely(!__pyx_cur_scope->__pyx_v_length)) { __Pyx_RaiseClosureNameError("length"); __PYX_ERR(0, 5077, __pyx_L1_error) }
  __pyx_t_3 = __Pyx_PyInt_SubtractObjC(__pyx_cur_scope->__pyx_v_length, __pyx_int_1, 1, 0, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5077, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = NULL;
  __pyx_t_5 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) {
    __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_1);
    if (likely(__pyx_t_4)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
      __Pyx_INCREF(__pyx_t_4);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_1, function);
      __pyx_t_5 = 1;
    }
  }
  {
    PyObject *__pyx_callargs[4] = {__pyx_t_4, __pyx_cur_scope->__pyx_v_ind, __pyx_int_0, __pyx_t_3};
    __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_5, 3+__pyx_t_5);
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5077, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  }
  __Pyx_GOTREF(__pyx_cur_scope->__pyx_v_ind);
  __Pyx_DECREF_SET(__pyx_cur_scope->__pyx_v_ind, __pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_2);
  __pyx_t_2 = 0;
+5078:             return v
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_v);
  __pyx_r = __pyx_v_v;
  goto __pyx_L0;
+5079:     return reader
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_reader);
  __pyx_r = __pyx_v_reader;
  goto __pyx_L0;
 5080: 
+5081: def sndplay(file):
/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_551sndplay(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_8pysndlib_3clm_551sndplay = {"sndplay", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pysndlib_3clm_551sndplay, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_8pysndlib_3clm_551sndplay(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_file = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("sndplay (wrapper)", 0);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_file,0};
    PyObject* values[1] = {0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_file)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 5081, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "sndplay") < 0)) __PYX_ERR(0, 5081, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
    }
    __pyx_v_file = values[0];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("sndplay", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 5081, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pysndlib.clm.sndplay", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8pysndlib_3clm_550sndplay(__pyx_self, __pyx_v_file);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_550sndplay(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_file) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("sndplay", 0);
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("pysndlib.clm.sndplay", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__554 = PyTuple_Pack(1, __pyx_n_s_file); if (unlikely(!__pyx_tuple__554)) __PYX_ERR(0, 5081, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__554);
  __Pyx_GIVEREF(__pyx_tuple__554);
/* … */
  __pyx_t_37 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_551sndplay, 0, __pyx_n_s_sndplay, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__555)); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 5081, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_sndplay, __pyx_t_37) < 0) __PYX_ERR(0, 5081, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
  __pyx_codeobj__555 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__554, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_sndplay, 5081, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__555)) __PYX_ERR(0, 5081, __pyx_L1_error)
+5082:     subprocess.run([CLM.player,file])
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_subprocess); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5082, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_run); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5082, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_CLM); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5082, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_player); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 5082, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = PyList_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5082, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_4);
  PyList_SET_ITEM(__pyx_t_2, 0, __pyx_t_4);
  __Pyx_INCREF(__pyx_v_file);
  __Pyx_GIVEREF(__pyx_v_file);
  PyList_SET_ITEM(__pyx_t_2, 1, __pyx_v_file);
  __pyx_t_4 = 0;
  __pyx_t_4 = NULL;
  __pyx_t_5 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3);
    if (likely(__pyx_t_4)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_4);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_3, function);
      __pyx_t_5 = 1;
    }
  }
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_t_2};
    __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_5, 1+__pyx_t_5);
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5082, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 5083: 
 5084: 
+5085: cpdef test_data():
static PyObject *__pyx_pw_8pysndlib_3clm_553test_data(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static PyObject *__pyx_f_8pysndlib_3clm_test_data(CYTHON_UNUSED int __pyx_skip_dispatch) {
  mus_any *__pyx_v_op;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("test_data", 0);
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pysndlib.clm.test_data", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8pysndlib_3clm_553test_data(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static PyMethodDef __pyx_mdef_8pysndlib_3clm_553test_data = {"test_data", (PyCFunction)__pyx_pw_8pysndlib_3clm_553test_data, METH_NOARGS, 0};
static PyObject *__pyx_pw_8pysndlib_3clm_553test_data(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("test_data (wrapper)", 0);
  __pyx_r = __pyx_pf_8pysndlib_3clm_552test_data(__pyx_self);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8pysndlib_3clm_552test_data(CYTHON_UNUSED PyObject *__pyx_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("test_data", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_8pysndlib_3clm_test_data(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5085, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pysndlib.clm.test_data", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_37 = __Pyx_CyFunction_New(&__pyx_mdef_8pysndlib_3clm_553test_data, 0, __pyx_n_s_test_data, NULL, __pyx_n_s_pysndlib_clm, __pyx_d, ((PyObject *)__pyx_codeobj__556)); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 5085, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_test_data, __pyx_t_37) < 0) __PYX_ERR(0, 5085, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
/* … */
  __pyx_codeobj__556 = (PyObject*)__Pyx_PyCode_New(0, 0, 0, 0, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_pysndlib_clm_pyx, __pyx_n_s_test_data, 5085, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__556)) __PYX_ERR(0, 5085, __pyx_L1_error)
+5086:     op = cclm.mus_make_one_pole(.1, .2)
  __pyx_v_op = mus_make_one_pole(.1, .2);
+5087:     print(cclm.mus_data_exists(op))
  __pyx_t_1 = __Pyx_PyBool_FromLong(mus_data_exists(__pyx_v_op)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5087, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_builtin_print, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5087, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 5088: